@koobiq/components 18.37.0 → 18.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/core/locales/en-US.d.ts +6 -0
  2. package/core/locales/es-LA.d.ts +6 -0
  3. package/core/locales/formatters.d.ts +1 -0
  4. package/core/locales/locale-service.d.ts +37 -5
  5. package/core/locales/pt-BR.d.ts +6 -0
  6. package/core/locales/ru-RU.d.ts +6 -0
  7. package/core/locales/tk-TM.d.ts +6 -0
  8. package/core/pop-up/pop-up-trigger.d.ts +3 -1
  9. package/core/pop-up/pop-up.d.ts +1 -0
  10. package/core/validation/validation.d.ts +1 -1
  11. package/esm2022/core/locales/en-US.mjs +7 -1
  12. package/esm2022/core/locales/es-LA.mjs +7 -1
  13. package/esm2022/core/locales/formatters.mjs +4 -3
  14. package/esm2022/core/locales/locale-service.mjs +22 -9
  15. package/esm2022/core/locales/pt-BR.mjs +7 -1
  16. package/esm2022/core/locales/ru-RU.mjs +7 -1
  17. package/esm2022/core/locales/tk-TM.mjs +7 -1
  18. package/esm2022/core/pop-up/pop-up-trigger.mjs +1 -1
  19. package/esm2022/core/pop-up/pop-up.mjs +36 -2
  20. package/esm2022/core/validation/validation.mjs +2 -2
  21. package/esm2022/core/version.mjs +2 -2
  22. package/esm2022/dropdown/dropdown-trigger.directive.mjs +3 -2
  23. package/esm2022/filter-bar/filters.mjs +2 -2
  24. package/esm2022/filter-bar/pipes/pipe-date.mjs +2 -2
  25. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +2 -2
  26. package/esm2022/filter-bar/pipes/pipe-text.mjs +2 -2
  27. package/esm2022/input/input-number.mjs +17 -12
  28. package/esm2022/navbar/navbar-brand.component.mjs +105 -0
  29. package/esm2022/navbar/navbar-item.component.mjs +18 -168
  30. package/esm2022/navbar/navbar-toggle.component.mjs +88 -0
  31. package/esm2022/navbar/navbar.component.mjs +2 -2
  32. package/esm2022/navbar/navbar.module.mjs +4 -2
  33. package/esm2022/navbar/public-api.mjs +3 -1
  34. package/esm2022/navbar/vertical-navbar.component.mjs +28 -6
  35. package/esm2022/notification-center/notification-center.mjs +9 -33
  36. package/esm2022/popover/popover.component.mjs +9 -3
  37. package/esm2022/time-range/time-range.mjs +2 -2
  38. package/esm2022/title/title.directive.mjs +9 -2
  39. package/fesm2022/koobiq-components-core.mjs +90 -13
  40. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-dropdown.mjs +2 -1
  42. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-filter-bar.mjs +4 -4
  44. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-input.mjs +16 -11
  46. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-navbar.mjs +789 -739
  48. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-notification-center.mjs +8 -32
  50. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-popover.mjs +8 -2
  52. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-time-range.mjs +1 -1
  54. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-title.mjs +8 -1
  56. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  57. package/input/input-number.d.ts +3 -3
  58. package/navbar/_navbar-item_vertical.scss +44 -53
  59. package/navbar/_navbar-theme.scss +14 -35
  60. package/navbar/navbar-brand.component.d.ts +39 -0
  61. package/navbar/navbar-brand.scss +78 -48
  62. package/navbar/navbar-divider.scss +1 -1
  63. package/navbar/navbar-item.component.d.ts +4 -36
  64. package/navbar/navbar-toggle.component.d.ts +23 -0
  65. package/navbar/navbar-toggle.scss +64 -0
  66. package/navbar/navbar-tokens.scss +1 -0
  67. package/navbar/navbar.module.d.ts +8 -6
  68. package/navbar/public-api.d.ts +2 -0
  69. package/navbar/vertical-navbar.component.d.ts +20 -2
  70. package/navbar/vertical-navbar.scss +14 -10
  71. package/notification-center/notification-center.d.ts +12 -9
  72. package/package.json +4 -4
  73. package/popover/popover.component.d.ts +8 -1
  74. package/schematics/ng-add/index.js +2 -2
  75. package/title/title.directive.d.ts +2 -0
@@ -72,7 +72,7 @@ export class KbqPipeTextComponent extends KbqBasePipe {
72
72
  provide: KbqBasePipe,
73
73
  useExisting: this
74
74
  }
75
- ], viewQueries: [{ propertyName: "popover", first: true, predicate: KbqPopoverTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<button\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbqPipeTitle]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverClass]=\"'kbq-pipe__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverFooter]=\"footer\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [ngClass]=\"{ 'kbq-active': popover?.isOpen }\"\n>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!data.value\">\n {{ data.value }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n <kbq-form-field (keydown)=\"onKeydown($event)\">\n <textarea kbqTextarea rows=\"1\" [formControl]=\"control\" [freeRowsHeight]=\"0\" [maxRows]=\"5\"></textarea>\n </kbq-form-field>\n</ng-template>\n\n<ng-template #footer>\n <button kbq-button [color]=\"'theme'\" [disabled]=\"disabled\" [kbqStyle]=\"'transparent'\" (click)=\"onApply()\">\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '\u2318' : 'Ctrl+' }}Enter</span>\n </button>\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ data.value }}</div>\n</ng-template>\n", styles: ["@keyframes kbq-progress{0%{background-position:0 0}to{background-position:64px 0}}.kbq-progress{position:relative}.kbq-progress:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,#0000000a 12px,#ffffff1a 12px 22px,#0000000a 22px 34px,#ffffff1a 34px) repeat;background-size:32px 32px;animation:kbq-progress 1s linear infinite}.kbq-group{display:flex;flex-direction:row}.kbq-group .kbq-group_justified>.kbq-group-item{width:100%}.kbq-group .kbq-group-item+.kbq-group-item{margin-left:calc(-1 * var(--kbq-size-border-width))}.kbq-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group{display:flex;flex-direction:column}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group .kbq-group-item+.kbq-group-item{margin-top:calc(-1 * var(--kbq-size-border-width))}.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-pipe{display:flex;flex-direction:row;max-height:32px}.kbq-pipe .kbq-select .kbq-select__trigger{height:unset}.kbq-pipe .kbq-button-wrapper{max-width:320px}.kbq-pipe .kbq-pipe__name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;color:var(--kbq-foreground-contrast-secondary)}.kbq-pipe .kbq-pipe__value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto}.kbq-pipe .kbq-pipe__value:not(.kbq-pipe__value_empty){margin-left:4px}.kbq-pipe .kbq-pipe__separator{z-index:1;margin-left:-1px;margin-right:0;height:var(--kbq-size-l);align-self:center;color:var(--kbq-line-contrast-less)}.kbq-pipe .kbq-select:not(:hover,.kbq-active)+.kbq-pipe-button:not(:hover,.kbq-active):after,.kbq-pipe .kbq-tree-select:not(:hover,.kbq-active)+.kbq-pipe-button:not(:hover,.kbq-active):after,.kbq-pipe .kbq-button:not(:hover,.kbq-active,[disabled])+.kbq-pipe-button:not(:hover,.kbq-active):after{content:\"\";position:absolute;left:0;top:var(--kbq-size-s);width:1px;height:var(--kbq-size-l);background:var(--kbq-line-contrast-less)}.kbq-pipe .kbq-button.cdk-keyboard-focused{z-index:1}.kbq-pipe.kbq-pipe_disabled .kbq-pipe__name,.kbq-pipe.kbq-pipe_disabled .kbq-pipe__value{color:var(--kbq-states-foreground-disabled)}.kbq-pipe.kbq-pipe_removable .kbq-button,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button{border-bottom-right-radius:unset;border-top-right-radius:unset;border-right:none}.kbq-pipe.kbq-pipe_removable .kbq-button.cdk-keyboard-focused:after,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button.cdk-keyboard-focused:after{content:\"\";position:absolute;right:0;top:0;bottom:0;width:1px;background:var(--kbq-states-line-focus-theme)}.kbq-pipe.kbq-pipe_removable .kbq-button-icon,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button-icon{border-bottom-left-radius:unset;border-top-left-radius:unset;border-left:none}.kbq-pipe.kbq-pipe_removable .kbq-button-icon.cdk-keyboard-focused:after,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button-icon.cdk-keyboard-focused:after{content:\"\";position:absolute;left:0;top:0;bottom:0;width:1px;background:var(--kbq-states-line-focus-theme)}.kbq-pipe-tooltip__name{color:var(--kbq-foreground-white-secondary)}.kbq-pipe-tooltip__value{color:var(--kbq-foreground-white)}\n"], dependencies: [{ kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "ngmodule", type: KbqFormFieldModule }, { kind: "component", type: i2.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i2.KbqValidateDirective, selector: " input[kbqInput], input[kbqNumberInput], input[kbqInputPassword], input[kbqTimepicker], input[kbqDatepicker], textarea[kbqTextarea], kbq-select, kbq-tree-select, kbq-tag-list ", exportAs: ["KbqValidate"] }, { kind: "directive", type: i2.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: KbqPopoverModule }, { kind: "directive", type: i3.KbqPopoverTrigger, selector: "[kbqPopover]", inputs: ["kbqPopoverPreventClose", "defaultPaddings", "kbqPopoverVisible", "kbqPopoverPlacement", "kbqPopoverPlacementPriority", "hasBackdrop", "kbqPopoverHeader", "kbqPopoverContent", "kbqPopoverFooter", "kbqPopoverDisabled", "kbqTrigger", "kbqPopoverSize", "kbqPopoverClass", "kbqPopoverContext", "hasCloseButton", "closeOnScroll", "backdropClass", "kbqPopoverArrow", "kbqPopoverOffset", "kbqLeaveDelay"], outputs: ["kbqPopoverPlacementChange", "kbqPopoverVisibleChange"], exportAs: ["kbqPopover"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: KbqTextareaModule }, { kind: "directive", type: i5.KbqTextarea, selector: "textarea[kbqTextarea]", inputs: ["canGrow", "maxRows", "errorStateMatcher", "disabled", "id", "placeholder", "freeRowsHeight", "required", "value"], exportAs: ["kbqTextarea"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: KbqPipeButton, selector: "kbq-pipe-button", inputs: ["readonly"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: KbqPipeState, selector: "[kbqPipeState]", inputs: ["kbqPipeState"] }, { kind: "directive", type: KbqPipeTitleDirective, selector: "[kbqPipeTitle]", inputs: ["kbqPipeTitle"], exportAs: ["kbqPipeTitle"] }, { kind: "directive", type: KbqPipeMinWidth, selector: "[kbqPipeMinWidth]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
75
+ ], viewQueries: [{ propertyName: "popover", first: true, predicate: KbqPopoverTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<button\n kbq-button\n kbqPopover\n [disabled]=\"data.disabled\"\n [kbqPipeState]=\"data\"\n [kbqPipeTitle]=\"pipeTooltip\"\n [kbqPopoverArrow]=\"false\"\n [kbqPopoverClass]=\"'kbq-pipe__popover'\"\n [kbqPopoverContent]=\"content\"\n [kbqPopoverFooter]=\"footer\"\n [kbqPopoverOffset]=\"4\"\n [defaultPaddings]=\"false\"\n [kbqPopoverPlacement]=\"placements.BottomLeft\"\n [ngClass]=\"{ 'kbq-active': popover?.isOpen }\"\n>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__name\">{{ data.name }}</span>\n <span #kbqTitleText kbqPipeMinWidth class=\"kbq-pipe__value\" [class.kbq-pipe__value_empty]=\"!data.value\">\n {{ data.value }}\n </span>\n</button>\n\n@if (showRemoveButton) {\n <kbq-pipe-button />\n}\n\n<ng-template #content>\n <kbq-form-field (keydown)=\"onKeydown($event)\">\n <textarea kbqTextarea rows=\"1\" [formControl]=\"control\" [freeRowsHeight]=\"0\" [maxRows]=\"5\"></textarea>\n </kbq-form-field>\n</ng-template>\n\n<ng-template #footer>\n <button kbq-button [color]=\"'theme'\" [disabled]=\"disabled\" [kbqStyle]=\"'transparent'\" (click)=\"onApply()\">\n <span>{{ localeData.pipe.applyButton }}</span>\n &nbsp;\n <span class=\"kbq-button_hot-key\">{{ isMac ? '\u2318' : 'Ctrl+' }}Enter</span>\n </button>\n</ng-template>\n\n<ng-template #pipeTooltip>\n <div class=\"kbq-pipe-tooltip__name kbq-text-compact\">{{ data.name }}</div>\n <div class=\"kbq-pipe-tooltip__value kbq-text-compact\">{{ data.value }}</div>\n</ng-template>\n", styles: ["@keyframes kbq-progress{0%{background-position:0 0}to{background-position:64px 0}}.kbq-progress{position:relative}.kbq-progress:after{content:\"\";position:absolute;border-radius:inherit;inset:0;background:linear-gradient(135deg,#0000000a 12px,#ffffff1a 12px 22px,#0000000a 22px 34px,#ffffff1a 34px) repeat;background-size:32px 32px;animation:kbq-progress 1s linear infinite}.kbq-group{display:flex;flex-direction:row}.kbq-group .kbq-group_justified>.kbq-group-item{width:100%}.kbq-group .kbq-group-item+.kbq-group-item{margin-left:calc(-1 * var(--kbq-size-border-width))}.kbq-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-top-right-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-bottom-left-radius:0;border-top-left-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group{display:flex;flex-direction:column}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-right-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:first-child:not(:last-child)>.kbq-form-field__container{border-bottom-right-radius:0;border-bottom-left-radius:0}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-left-radius:var(--kbq-size-border-radius)}.kbq-vertical-group>.kbq-group-item:last-child:not(:first-child)>.kbq-form-field__container{border-top-right-radius:0;border-top-left-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child){border-radius:0}.kbq-vertical-group>.kbq-group-item:not(:first-child):not(:last-child)>.kbq-form-field__container{border-radius:0}.kbq-vertical-group .kbq-group-item+.kbq-group-item{margin-top:calc(-1 * var(--kbq-size-border-width))}.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-pipe{display:flex;flex-direction:row;max-height:32px}.kbq-pipe .kbq-select .kbq-select__trigger{height:unset}.kbq-pipe .kbq-button-wrapper{max-width:320px}.kbq-pipe .kbq-pipe__name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;color:var(--kbq-foreground-contrast-secondary)}.kbq-pipe .kbq-pipe__value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto}.kbq-pipe .kbq-pipe__value:not(.kbq-pipe__value_empty){margin-left:4px}.kbq-pipe .kbq-pipe__separator{z-index:1;margin-left:-1px;margin-right:0;height:var(--kbq-size-l);align-self:center;color:var(--kbq-line-contrast-less)}.kbq-pipe .kbq-select:not(:hover,.kbq-active)+.kbq-pipe-button:not(:hover,.kbq-active):after,.kbq-pipe .kbq-tree-select:not(:hover,.kbq-active)+.kbq-pipe-button:not(:hover,.kbq-active):after,.kbq-pipe .kbq-button:not(:hover,.kbq-active,[disabled])+.kbq-pipe-button:not(:hover,.kbq-active):after{content:\"\";position:absolute;left:0;top:var(--kbq-size-s);width:1px;height:var(--kbq-size-l);background:var(--kbq-line-contrast-less)}.kbq-pipe .kbq-button.cdk-keyboard-focused{z-index:1}.kbq-pipe.kbq-pipe_disabled .kbq-pipe__name,.kbq-pipe.kbq-pipe_disabled .kbq-pipe__value{color:var(--kbq-states-foreground-disabled)}.kbq-pipe.kbq-pipe_removable .kbq-button,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button{border-bottom-right-radius:unset;border-top-right-radius:unset;border-right:none}.kbq-pipe.kbq-pipe_removable .kbq-button.cdk-keyboard-focused:after,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button.cdk-keyboard-focused:after{content:\"\";position:absolute;right:0;top:0;bottom:0;width:1px;background:var(--kbq-states-line-focus-theme)}.kbq-pipe.kbq-pipe_removable .kbq-button-icon,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button-icon{border-bottom-left-radius:unset;border-top-left-radius:unset;border-left:none}.kbq-pipe.kbq-pipe_removable .kbq-button-icon.cdk-keyboard-focused:after,.kbq-pipe.kbq-pipe_cleanable:not(.kbq-pipe_empty) .kbq-button-icon.cdk-keyboard-focused:after{content:\"\";position:absolute;left:0;top:0;bottom:0;width:1px;background:var(--kbq-states-line-focus-theme)}.kbq-pipe-tooltip__name{color:var(--kbq-foreground-white-secondary)}.kbq-pipe-tooltip__value{color:var(--kbq-foreground-white)}\n"], dependencies: [{ kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "ngmodule", type: KbqFormFieldModule }, { kind: "component", type: i2.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i2.KbqValidateDirective, selector: " input[kbqInput], input[kbqNumberInput], input[kbqInputPassword], input[kbqTimepicker], input[kbqDatepicker], textarea[kbqTextarea], kbq-select, kbq-tree-select, kbq-tag-list ", exportAs: ["KbqValidate"] }, { kind: "directive", type: i2.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: KbqPopoverModule }, { kind: "directive", type: i3.KbqPopoverTrigger, selector: "[kbqPopover]", inputs: ["kbqPopoverPreventClose", "defaultPaddings", "kbqPopoverVisible", "kbqPopoverPlacement", "kbqPopoverPlacementPriority", "kbqPopoverStickToWindow", "container", "hasBackdrop", "kbqPopoverHeader", "kbqPopoverContent", "kbqPopoverFooter", "kbqPopoverDisabled", "kbqTrigger", "kbqPopoverSize", "kbqPopoverClass", "kbqPopoverContext", "hasCloseButton", "closeOnScroll", "backdropClass", "kbqPopoverArrow", "kbqPopoverOffset", "kbqLeaveDelay"], outputs: ["kbqPopoverPlacementChange", "kbqPopoverVisibleChange"], exportAs: ["kbqPopover"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: KbqTextareaModule }, { kind: "directive", type: i5.KbqTextarea, selector: "textarea[kbqTextarea]", inputs: ["canGrow", "maxRows", "errorStateMatcher", "disabled", "id", "placeholder", "freeRowsHeight", "required", "value"], exportAs: ["kbqTextarea"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: KbqPipeButton, selector: "kbq-pipe-button", inputs: ["readonly"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: KbqTitleModule }, { kind: "directive", type: KbqPipeState, selector: "[kbqPipeState]", inputs: ["kbqPipeState"] }, { kind: "directive", type: KbqPipeTitleDirective, selector: "[kbqPipeTitle]", inputs: ["kbqPipeTitle"], exportAs: ["kbqPipeTitle"] }, { kind: "directive", type: KbqPipeMinWidth, selector: "[kbqPipeMinWidth]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
76
76
  }
77
77
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqPipeTextComponent, decorators: [{
78
78
  type: Component,
@@ -101,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
101
101
  type: ViewChild,
102
102
  args: [KbqPopoverTrigger]
103
103
  }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZS10ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9maWx0ZXItYmFyL3BpcGVzL3BpcGUtdGV4dC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZmlsdGVyLWJhci9waXBlcy9waXBlLXRleHQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFB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LGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsV0FBVzs0QkFDcEIsV0FBVyxFQUFFLElBQUk7eUJBQ3BCO3FCQUNKLFdBQ1E7d0JBQ0wsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1oscUJBQXFCO3dCQUNyQixlQUFlO3FCQUNsQjs4QkFNNkIsT0FBTztzQkFBcEMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRU5URVIgfSBmcm9tICdAa29vYmlxL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBLYnFCdXR0b25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IFBvcFVwUGxhY2VtZW50cyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IEticURpdmlkZXJNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZGl2aWRlcic7XG5pbXBvcnQgeyBLYnFGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBLYnFJbnB1dE1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBLYnFQb3BvdmVyTW9kdWxlLCBLYnFQb3BvdmVyVHJpZ2dlciB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEticVRleHRhcmVhTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL3RleHRhcmVhJztcbmltcG9ydCB7IEticVRpdGxlTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL3RpdGxlJztcbmltcG9ydCB7IEticUJhc2VQaXBlLCBLYnFQaXBlTWluV2lkdGggfSBmcm9tICcuL2Jhc2UtcGlwZSc7XG5pbXBvcnQgeyBLYnFQaXBlQnV0dG9uIH0gZnJvbSAnLi9waXBlLWJ1dHRvbic7XG5pbXBvcnQgeyBLYnFQaXBlU3RhdGUgfSBmcm9tICcuL3BpcGUtc3RhdGUnO1xuaW1wb3J0IHsgS2JxUGlwZVRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9waXBlLXRpdGxlJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2ticS1waXBlLXRleHQnLFxuICAgIHRlbXBsYXRlVXJsOiAncGlwZS10ZXh0Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydiYXNlLXBpcGUuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEticUJhc2VQaXBlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IHRoaXNcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticUZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgS2JxUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgS2JxSW5wdXRNb2R1bGUsXG4gICAgICAgIEticURpdmlkZXJNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBLYnFUZXh0YXJlYU1vZHVsZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgS2JxUGlwZUJ1dHRvbixcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgS2JxVGl0bGVNb2R1bGUsXG4gICAgICAgIEticVBpcGVTdGF0ZSxcbiAgICAgICAgS2JxUGlwZVRpdGxlRGlyZWN0aXZlLFxuICAgICAgICBLYnFQaXBlTWluV2lkdGhcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEticVBpcGVUZXh0Q29tcG9uZW50IGV4dGVuZHMgS2JxQmFzZVBpcGU8c3RyaW5nIHwgbnVsbD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICAgIHJlYWRvbmx5IHBsYWNlbWVudHMgPSBQb3BVcFBsYWNlbWVudHM7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBWaWV3Q2hpbGQoS2JxUG9wb3ZlclRyaWdnZXIpIHBvcG92ZXI6IEticVBvcG92ZXJUcmlnZ2VyO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGlwZSBpcyBkaXNhYmxlZC4gKi9cbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb250cm9sLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiB0ZXh0YXJlYSBjb250cm9sICovXG4gICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDx0eXBlb2YgdGhpcy5kYXRhLnZhbHVlPignJyk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuZGF0YS52YWx1ZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgICAgICB0aGlzLnBvcG92ZXIudmlzaWJsZUNoYW5nZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZpc2libGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcblxuICAgICAgICAgICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJCYXI/Lm9uQ2xvc2VQaXBlLm5leHQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25BcHBseSgpIHtcbiAgICAgICAgdGhpcy5kYXRhLnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIHRoaXMucG9wb3Zlci5oaWRlKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJCYXI/Lm9uQ2hhbmdlUGlwZS5uZXh0KHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAoJGV2ZW50LmN0cmxLZXkgfHwgJGV2ZW50Lm1ldGFLZXkpICYmICRldmVudC5rZXlDb2RlID09PSBFTlRFUikge1xuICAgICAgICAgICAgdGhpcy5vbkFwcGx5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogY2xlYXJzIHRoZSBwaXBlIGFuZCB0cmlnZ2VycyBjaGFuZ2VzICovXG4gICAgb3ZlcnJpZGUgb25DbGVhcigpIHtcbiAgICAgICAgc3VwZXIub25DbGVhcigpO1xuXG4gICAgICAgIHRoaXMuY29udHJvbC5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKiBvcGVucyBwb3BvdmVyICovXG4gICAgb3ZlcnJpZGUgb3BlbigpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLnNob3coKTtcbiAgICB9XG59XG4iLCI8YnV0dG9uXG4gICAga2JxLWJ1dHRvblxuICAgIGticVBvcG92ZXJcbiAgICBbZGlzYWJsZWRdPVwiZGF0YS5kaXNhYmxlZFwiXG4gICAgW2ticVBpcGVTdGF0ZV09XCJkYXRhXCJcbiAgICBba2JxUGlwZVRpdGxlXT1cInBpcGVUb29sdGlwXCJcbiAgICBba2JxUG9wb3ZlckFycm93XT1cImZhbHNlXCJcbiAgICBba2JxUG9wb3ZlckNsYXNzXT1cIidrYnEtcGlwZV9fcG9wb3ZlcidcIlxuICAgIFtrYnFQb3BvdmVyQ29udGVudF09XCJjb250ZW50XCJcbiAgICBba2JxUG9wb3ZlckZvb3Rlcl09XCJmb290ZXJcIlxuICAgIFtrYnFQb3BvdmVyT2Zmc2V0XT1cIjRcIlxuICAgIFtkZWZhdWx0UGFkZGluZ3NdPVwiZmFsc2VcIlxuICAgIFtrYnFQb3BvdmVyUGxhY2VtZW50XT1cInBsYWNlbWVudHMuQm90dG9tTGVmdFwiXG4gICAgW25nQ2xhc3NdPVwieyAna2JxLWFjdGl2ZSc6IHBvcG92ZXI/LmlzT3BlbiB9XCJcbj5cbiAgICA8c3BhbiAja2JxVGl0bGVUZXh0IGticVBpcGVNaW5XaWR0aCBjbGFzcz1cImticS1waXBlX19uYW1lXCI+e3sgZGF0YS5uYW1lIH19PC9zcGFuPlxuICAgIDxzcGFuICNrYnFUaXRsZVRleHQga2JxUGlwZU1pbldpZHRoIGNsYXNzPVwia2JxLXBpcGVfX3ZhbHVlXCIgW2NsYXNzLmticS1waXBlX192YWx1ZV9lbXB0eV09XCIhZGF0YS52YWx1ZVwiPlxuICAgICAgICB7eyBkYXRhLnZhbHVlIH19XG4gICAgPC9zcGFuPlxuPC9idXR0b24+XG5cbkBpZiAoc2hvd1JlbW92ZUJ1dHRvbikge1xuICAgIDxrYnEtcGlwZS1idXR0b24gLz5cbn1cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxrYnEtZm9ybS1maWVsZCAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiPlxuICAgICAgICA8dGV4dGFyZWEga2JxVGV4dGFyZWEgcm93cz1cIjFcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtmcmVlUm93c0hlaWdodF09XCIwXCIgW21heFJvd3NdPVwiNVwiPjwvdGV4dGFyZWE+XG4gICAgPC9rYnEtZm9ybS1maWVsZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZm9vdGVyPlxuICAgIDxidXR0b24ga2JxLWJ1dHRvbiBbY29sb3JdPVwiJ3RoZW1lJ1wiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uQXBwbHkoKVwiPlxuICAgICAgICA8c3Bhbj57eyBsb2NhbGVEYXRhLnBpcGUuYXBwbHlCdXR0b24gfX08L3NwYW4+XG4gICAgICAgICZuYnNwO1xuICAgICAgICA8c3BhbiBjbGFzcz1cImticS1idXR0b25faG90LWtleVwiPnt7IGlzTWFjID8gJ+KMmCcgOiAnQ3RybCsnIH19RW50ZXI8L3NwYW4+XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3BpcGVUb29sdGlwPlxuICAgIDxkaXYgY2xhc3M9XCJrYnEtcGlwZS10b29sdGlwX19uYW1lIGticS10ZXh0LWNvbXBhY3RcIj57eyBkYXRhLm5hbWUgfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwia2JxLXBpcGUtdG9vbHRpcF9fdmFsdWUga2JxLXRleHQtY29tcGFjdFwiPnt7IGRhdGEudmFsdWUgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZS10ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9maWx0ZXItYmFyL3BpcGVzL3BpcGUtdGV4dC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvZmlsdGVyLWJhci9waXBlcy9waXBlLXRleHQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFB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LGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsV0FBVzs0QkFDcEIsV0FBVyxFQUFFLElBQUk7eUJBQ3BCO3FCQUNKLFdBQ1E7d0JBQ0wsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1oscUJBQXFCO3dCQUNyQixlQUFlO3FCQUNsQjs4QkFNNkIsT0FBTztzQkFBcEMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRU5URVIgfSBmcm9tICdAa29vYmlxL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBLYnFCdXR0b25Nb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IFBvcFVwUGxhY2VtZW50cyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9jb3JlJztcbmltcG9ydCB7IEticURpdmlkZXJNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZGl2aWRlcic7XG5pbXBvcnQgeyBLYnFGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBLYnFJbnB1dE1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBLYnFQb3BvdmVyTW9kdWxlLCBLYnFQb3BvdmVyVHJpZ2dlciB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEticVRleHRhcmVhTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL3RleHRhcmVhJztcbmltcG9ydCB7IEticVRpdGxlTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL3RpdGxlJztcbmltcG9ydCB7IEticUJhc2VQaXBlLCBLYnFQaXBlTWluV2lkdGggfSBmcm9tICcuL2Jhc2UtcGlwZSc7XG5pbXBvcnQgeyBLYnFQaXBlQnV0dG9uIH0gZnJvbSAnLi9waXBlLWJ1dHRvbic7XG5pbXBvcnQgeyBLYnFQaXBlU3RhdGUgfSBmcm9tICcuL3BpcGUtc3RhdGUnO1xuaW1wb3J0IHsgS2JxUGlwZVRpdGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9waXBlLXRpdGxlJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2ticS1waXBlLXRleHQnLFxuICAgIHRlbXBsYXRlVXJsOiAncGlwZS10ZXh0Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydiYXNlLXBpcGUuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEticUJhc2VQaXBlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IHRoaXNcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBLYnFCdXR0b25Nb2R1bGUsXG4gICAgICAgIEticUZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgS2JxUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgS2JxSW5wdXRNb2R1bGUsXG4gICAgICAgIEticURpdmlkZXJNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBLYnFUZXh0YXJlYU1vZHVsZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgS2JxUGlwZUJ1dHRvbixcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgS2JxVGl0bGVNb2R1bGUsXG4gICAgICAgIEticVBpcGVTdGF0ZSxcbiAgICAgICAgS2JxUGlwZVRpdGxlRGlyZWN0aXZlLFxuICAgICAgICBLYnFQaXBlTWluV2lkdGhcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEticVBpcGVUZXh0Q29tcG9uZW50IGV4dGVuZHMgS2JxQmFzZVBpcGU8c3RyaW5nIHwgbnVsbD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICAgIHJlYWRvbmx5IHBsYWNlbWVudHMgPSBQb3BVcFBsYWNlbWVudHM7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIEBWaWV3Q2hpbGQoS2JxUG9wb3ZlclRyaWdnZXIpIHBvcG92ZXI6IEticVBvcG92ZXJUcmlnZ2VyO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGlwZSBpcyBkaXNhYmxlZC4gKi9cbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb250cm9sLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiB0ZXh0YXJlYSBjb250cm9sICovXG4gICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDx0eXBlb2YgdGhpcy5kYXRhLnZhbHVlPignJyk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuZGF0YS52YWx1ZSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgICAgICB0aGlzLnBvcG92ZXIudmlzaWJsZUNoYW5nZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZpc2libGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcblxuICAgICAgICAgICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJCYXI/Lm9uQ2xvc2VQaXBlLm5leHQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25BcHBseSgpIHtcbiAgICAgICAgdGhpcy5kYXRhLnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG5cbiAgICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIHRoaXMucG9wb3Zlci5oaWRlKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJCYXI/Lm9uQ2hhbmdlUGlwZS5uZXh0KHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAoJGV2ZW50LmN0cmxLZXkgfHwgJGV2ZW50Lm1ldGFLZXkpICYmICRldmVudC5rZXlDb2RlID09PSBFTlRFUikge1xuICAgICAgICAgICAgdGhpcy5vbkFwcGx5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogY2xlYXJzIHRoZSBwaXBlIGFuZCB0cmlnZ2VycyBjaGFuZ2VzICovXG4gICAgb3ZlcnJpZGUgb25DbGVhcigpIHtcbiAgICAgICAgc3VwZXIub25DbGVhcigpO1xuXG4gICAgICAgIHRoaXMuY29udHJvbC5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKiBvcGVucyBwb3BvdmVyICovXG4gICAgb3ZlcnJpZGUgb3BlbigpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLnNob3coKTtcbiAgICB9XG59XG4iLCI8YnV0dG9uXG4gICAga2JxLWJ1dHRvblxuICAgIGticVBvcG92ZXJcbiAgICBbZGlzYWJsZWRdPVwiZGF0YS5kaXNhYmxlZFwiXG4gICAgW2ticVBpcGVTdGF0ZV09XCJkYXRhXCJcbiAgICBba2JxUGlwZVRpdGxlXT1cInBpcGVUb29sdGlwXCJcbiAgICBba2JxUG9wb3ZlckFycm93XT1cImZhbHNlXCJcbiAgICBba2JxUG9wb3ZlckNsYXNzXT1cIidrYnEtcGlwZV9fcG9wb3ZlcidcIlxuICAgIFtrYnFQb3BvdmVyQ29udGVudF09XCJjb250ZW50XCJcbiAgICBba2JxUG9wb3ZlckZvb3Rlcl09XCJmb290ZXJcIlxuICAgIFtrYnFQb3BvdmVyT2Zmc2V0XT1cIjRcIlxuICAgIFtkZWZhdWx0UGFkZGluZ3NdPVwiZmFsc2VcIlxuICAgIFtrYnFQb3BvdmVyUGxhY2VtZW50XT1cInBsYWNlbWVudHMuQm90dG9tTGVmdFwiXG4gICAgW25nQ2xhc3NdPVwieyAna2JxLWFjdGl2ZSc6IHBvcG92ZXI/LmlzT3BlbiB9XCJcbj5cbiAgICA8c3BhbiAja2JxVGl0bGVUZXh0IGticVBpcGVNaW5XaWR0aCBjbGFzcz1cImticS1waXBlX19uYW1lXCI+e3sgZGF0YS5uYW1lIH19PC9zcGFuPlxuICAgIDxzcGFuICNrYnFUaXRsZVRleHQga2JxUGlwZU1pbldpZHRoIGNsYXNzPVwia2JxLXBpcGVfX3ZhbHVlXCIgW2NsYXNzLmticS1waXBlX192YWx1ZV9lbXB0eV09XCIhZGF0YS52YWx1ZVwiPlxuICAgICAgICB7eyBkYXRhLnZhbHVlIH19XG4gICAgPC9zcGFuPlxuPC9idXR0b24+XG5cbkBpZiAoc2hvd1JlbW92ZUJ1dHRvbikge1xuICAgIDxrYnEtcGlwZS1idXR0b24gLz5cbn1cblxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxrYnEtZm9ybS1maWVsZCAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiPlxuICAgICAgICA8dGV4dGFyZWEga2JxVGV4dGFyZWEgcm93cz1cIjFcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtmcmVlUm93c0hlaWdodF09XCIwXCIgW21heFJvd3NdPVwiNVwiPjwvdGV4dGFyZWE+XG4gICAgPC9rYnEtZm9ybS1maWVsZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZm9vdGVyPlxuICAgIDxidXR0b24ga2JxLWJ1dHRvbiBbY29sb3JdPVwiJ3RoZW1lJ1wiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtrYnFTdHlsZV09XCIndHJhbnNwYXJlbnQnXCIgKGNsaWNrKT1cIm9uQXBwbHkoKVwiPlxuICAgICAgICA8c3Bhbj57eyBsb2NhbGVEYXRhLnBpcGUuYXBwbHlCdXR0b24gfX08L3NwYW4+XG4gICAgICAgICZuYnNwO1xuICAgICAgICA8c3BhbiBjbGFzcz1cImticS1idXR0b25faG90LWtleVwiPnt7IGlzTWFjID8gJ+KMmCcgOiAnQ3RybCsnIH19RW50ZXI8L3NwYW4+XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3BpcGVUb29sdGlwPlxuICAgIDxkaXYgY2xhc3M9XCJrYnEtcGlwZS10b29sdGlwX19uYW1lIGticS10ZXh0LWNvbXBhY3RcIj57eyBkYXRhLm5hbWUgfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwia2JxLXBpcGUtdG9vbHRpcF9fdmFsdWUga2JxLXRleHQtY29tcGFjdFwiPnt7IGRhdGEudmFsdWUgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -3,7 +3,7 @@ import { Attribute, booleanAttribute, Directive, ElementRef, EventEmitter, forwa
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
  import { BACKSPACE, DASH, DELETE, DOWN_ARROW, END, ENTER, ESCAPE, FF_MINUS, HOME, isCopy, isFunctionKey, isNumberKey, isNumpadKey, isSelectAll, LEFT_ARROW, NUMPAD_MINUS, RIGHT_ARROW, TAB, UP_ARROW, V, X, Z } from '@koobiq/cdk/keycodes';
6
- import { checkAndNormalizeLocalizedNumber, formatNumberWithLocale, KBQ_LOCALE_SERVICE, KbqLocaleService, normalizeNumber, ruRUFormattersData } from '@koobiq/components/core';
6
+ import { checkAndNormalizeLocalizedNumber, formatNumberWithLocale, KBQ_DEFAULT_PRECISION_SEPARATOR, KBQ_LOCALE_SERVICE, KbqLocaleService, normalizeNumber, ruRUFormattersData } from '@koobiq/components/core';
7
7
  import { Subject } from 'rxjs';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@koobiq/components/core";
@@ -11,7 +11,7 @@ export const KBQ_INPUT_NUMBER_DEFAULT_CONFIGURATION = ruRUFormattersData.input.n
11
11
  export const BIG_STEP = 10;
12
12
  export const SMALL_STEP = 1;
13
13
  export function normalizeSplitter(value) {
14
- return value ? value.replace(/,/g, '.') : value;
14
+ return value ? value.replace(/,/g, KBQ_DEFAULT_PRECISION_SEPARATOR) : value;
15
15
  }
16
16
  export function isFloat(value) {
17
17
  return /^-?\d+\.\d+$/.test(value);
@@ -23,7 +23,7 @@ export function isDigit(value) {
23
23
  return isFloat(value) || isInt(value);
24
24
  }
25
25
  export function getPrecision(value) {
26
- const arr = value.toString().split('.');
26
+ const arr = value.toString().split(KBQ_DEFAULT_PRECISION_SEPARATOR);
27
27
  return arr.length === 1 ? 1 : Math.pow(10, arr[1].length);
28
28
  }
29
29
  export function add(value1, value2) {
@@ -107,7 +107,8 @@ export class KbqNumberInput {
107
107
  return event.keyCode === Z && (event.ctrlKey || event.metaKey);
108
108
  };
109
109
  this.isPeriod = (event) => {
110
- return this.groupSeparator.includes(event.key) || [this.fractionSeparator, '.'].includes(event.key);
110
+ return (this.groupSeparator.includes(event.key) ||
111
+ [this.fractionSeparator, KBQ_DEFAULT_PRECISION_SEPARATOR].includes(event.key));
111
112
  };
112
113
  this.cvaOnChange = () => { };
113
114
  this.updateLocaleParams = () => {
@@ -169,11 +170,14 @@ export class KbqNumberInput {
169
170
  const serviceKeys = [DELETE, BACKSPACE, TAB, ESCAPE, ENTER];
170
171
  const arrows = [LEFT_ARROW, RIGHT_ARROW];
171
172
  const allowedKeys = [HOME, END].concat(arrows).concat(serviceKeys).concat(minuses);
172
- if ((this.integer && this.isPeriod(event)) ||
173
- (minuses.includes(keyCode) && (this.viewValue.includes(event.key) || this.min >= 0)) ||
174
- (this.isPeriod(event) &&
175
- event.key === this.fractionSeparator &&
176
- this.viewValue.indexOf(this.fractionSeparator) !== -1)) {
173
+ // should parse normalized fractionSeparator
174
+ const viewValueToBeChecked = normalizeNumber(this.viewValue, this.config);
175
+ const shouldSkipForIntegerMode = this.integer && this.isPeriod(event);
176
+ const isMinusAllowed = minuses.includes(keyCode) && (this.viewValue.includes(event.key) || this.min >= 0);
177
+ const isSignAndFractionSepAlreadyExists = this.isPeriod(event) &&
178
+ [this.fractionSeparator, KBQ_DEFAULT_PRECISION_SEPARATOR].includes(event.key) &&
179
+ viewValueToBeChecked.indexOf(KBQ_DEFAULT_PRECISION_SEPARATOR) !== -1;
180
+ if (shouldSkipForIntegerMode || isMinusAllowed || isSignAndFractionSepAlreadyExists) {
177
181
  event.preventDefault();
178
182
  return;
179
183
  }
@@ -189,8 +193,9 @@ export class KbqNumberInput {
189
193
  // let it happen, don't do anything
190
194
  return;
191
195
  }
196
+ const isLetter = !isNumberKey(event) && !isNumpadKey(event);
192
197
  // Ensure that it is not a number and stop the keypress
193
- if (event.shiftKey || (!isNumberKey(event) && !isNumpadKey(event))) {
198
+ if (event.shiftKey || isLetter) {
194
199
  event.preventDefault();
195
200
  // process steps
196
201
  const step = event.shiftKey ? this.bigStep : this.step;
@@ -300,7 +305,7 @@ export class KbqNumberInput {
300
305
  formatNumber(value) {
301
306
  if (value === null || value === undefined)
302
307
  return null;
303
- const [intPart, fractionPart] = value.toString().split('.');
308
+ const [intPart, fractionPart] = value.toString().split(KBQ_DEFAULT_PRECISION_SEPARATOR);
304
309
  return this.createLocalizedNumberFromParts(+intPart, fractionPart);
305
310
  }
306
311
  createLocalizedNumberFromParts(intPart, fractionPart) {
@@ -378,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
378
383
  }], disabled: [{
379
384
  type: Input
380
385
  }] } });
381
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNILFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXlDLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUNILFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixHQUFHLEVBQ0gsS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLEVBQ2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsRUFDUixDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDSixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDSCxnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFFaEIsZUFBZSxFQUNmLGtCQUFrQixFQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUUvQixNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBRXRGLE1BQU0sQ0FBQyxN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aUJBQWlCO3FCQUMvQjtpQkFDSjs7MEJBNEhRLFNBQVM7MkJBQUMsTUFBTTs7MEJBQ2hCLFNBQVM7MkJBQUMsVUFBVTs7MEJBQ3BCLFNBQVM7MkJBQUMsS0FBSzs7MEJBQ2YsU0FBUzsyQkFBQyxLQUFLOzswQkFDZixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjt5Q0F0RzFDLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJdEMsT0FBTztzQkFETixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixHQUFHO3NCQURGLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLHFCQUFxQjtzQkFEcEIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFPdEMsbUJBQW1CO3NCQURsQixLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSztnQkFvQkYsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQXR0cmlidXRlLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQkFDS1NQQUNFLFxuICAgIERBU0gsXG4gICAgREVMRVRFLFxuICAgIERPV05fQVJST1csXG4gICAgRU5ELFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBGRl9NSU5VUyxcbiAgICBIT01FLFxuICAgIGlzQ29weSxcbiAgICBpc0Z1bmN0aW9uS2V5LFxuICAgIGlzTnVtYmVyS2V5LFxuICAgIGlzTnVtcGFkS2V5LFxuICAgIGlzU2VsZWN0QWxsLFxuICAgIExFRlRfQVJST1csXG4gICAgTlVNUEFEX01JTlVTLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFRBQixcbiAgICBVUF9BUlJPVyxcbiAgICBWLFxuICAgIFgsXG4gICAgWlxufSBmcm9tICdAa29vYmlxL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIGNoZWNrQW5kTm9ybWFsaXplTG9jYWxpemVkTnVtYmVyLFxuICAgIGZvcm1hdE51bWJlcldpdGhMb2NhbGUsXG4gICAgS0JRX0xPQ0FMRV9TRVJWSUNFLFxuICAgIEticUxvY2FsZVNlcnZpY2UsXG4gICAgS2JxTnVtYmVySW5wdXRMb2NhbGVDb25maWcsXG4gICAgbm9ybWFsaXplTnVtYmVyLFxuICAgIHJ1UlVGb3JtYXR0ZXJzRGF0YVxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgS0JRX0lOUFVUX05VTUJFUl9ERUZBVUxUX0NPTkZJR1VSQVRJT04gPSBydVJVRm9ybWF0dGVyc0RhdGEuaW5wdXQubnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQklHX1NURVAgPSAxMDtcbmV4cG9ydCBjb25zdCBTTUFMTF9TVEVQID0gMTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNwbGl0dGVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLnJlcGxhY2UoLywvZywgJy4nKSA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGbG9hdCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eLT9cXGQrXFwuXFxkKyQvLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXi0/XFxkKyQvLnRlc3QodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWdpdCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRmxvYXQodmFsdWUpIHx8IGlzSW50KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZWNpc2lvbih2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBhcnIgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG5cbiAgICByZXR1cm4gYXJyLmxlbmd0aCA9PT0gMSA/IDEgOiBNYXRoLnBvdygxMCwgYXJyWzFdLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQodmFsdWUxOiBudW1iZXIsIHZhbHVlMjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwcmVjaXNpb24gPSBNYXRoLm1heChnZXRQcmVjaXNpb24odmFsdWUxKSwgZ2V0UHJlY2lzaW9uKHZhbHVlMikpO1xuXG4gICAgcmV0dXJuICh2YWx1ZTEgKiBwcmVjaXNpb24gKyB2YWx1ZTIgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xufVxuXG5leHBvcnQgY29uc3QgS0JRX05VTUJFUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEticU51bWJlcklucHV0KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IGBpbnB1dFtrYnFOdW1iZXJJbnB1dF1gLFxuICAgIGV4cG9ydEFzOiAna2JxTnVtZXJpY2FsSW5wdXQnLFxuICAgIHByb3ZpZGVyczogW0tCUV9OVU1CRVJfSU5QVVRfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhibHVyKSc6ICdmb2N1c0NoYW5nZWQoZmFsc2UpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZm9jdXNDaGFuZ2VkKHRydWUpJyxcbiAgICAgICAgJyhwYXN0ZSknOiAnb25QYXN0ZSgkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleURvd24oJGV2ZW50KScsXG4gICAgICAgICcoaW5wdXQpJzogJ29uSW5wdXQoJGV2ZW50KSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticU51bWJlcklucHV0IGltcGxlbWVudHMgS2JxRm9ybUZpZWxkQ29udHJvbDxhbnk+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcyAoZWl0aGVyIGR1ZSB0byB1c2VyIGlucHV0IG9yIHByb2dyYW1tYXRpYyBjaGFuZ2UpLiAqL1xuICAgIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudWxsPigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIGRpc2FibGVkIHN0YXRlIGhhcyBjaGFuZ2VkICovXG4gICAgZGlzYWJsZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICByZWFkb25seSBzdGF0ZUNoYW5nZXM6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgaWQ6IHN0cmluZztcblxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICBlbXB0eTogYm9vbGVhbjtcblxuICAgIHJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgZXJyb3JTdGF0ZTogYm9vbGVhbjtcblxuICAgIGNvbnRyb2xUeXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIGlucHV0IGFuZCBwYXN0aW5nIG9mIGludGVnZXJzIG9ubHkuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgaW50ZWdlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBiaWdTdGVwOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHN0ZXA6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgbWluOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIG1heDogbnVtYmVyO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgd2l0aFRob3VzYW5kU2VwYXJhdG9yOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluY2x1ZGUgdGhvdXNhbmQgc2VwYXJhdG9yIGZyb20gY3VzdG9tIGluZGV4LiBGb3IgZXhhbXBsZSwgaXQgd2lsbCBiZSB1c2VmdWwgaW4gdGFibGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRGb3JtYXR0aW5nRnJvbT86IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKHRoaXMuZm9ybWF0TnVtYmVyKHZhbHVlKSk7XG5cbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWx1ZTogbnVtYmVyIHwgbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMubmF0aXZlRWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gbnVsbCBjaGVjayB0aGUgYGJsdXJgIG1ldGhvZCwgYmVjYXVzZSBpdCdzIHVuZGVmaW5lZCBkdXJpbmcgU1NSLlxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgZWxlbWVudC5ibHVyKSB7XG4gICAgICAgICAgICAvLyBOb3JtYWxseSwgbmF0aXZlIGlucHV0IGVsZW1lbnRzIGF1dG9tYXRpY2FsbHkgYmx1ciBpZiB0aGV5IHR1cm4gZGlzYWJsZWQuIFRoaXMgYmVoYXZpb3JcbiAgICAgICAgICAgIC8vIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGl0IHdvdWxkIG1lYW4gdGhhdCBpdCB0cmlnZ2VycyBhbm90aGVyIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUsXG4gICAgICAgICAgICAvLyB3aGljaCB0aGVuIGNhdXNlcyBhIGNoYW5nZWQgYWZ0ZXIgY2hlY2tlZCBlcnJvciBpZiB0aGUgaW5wdXQgZWxlbWVudCB3YXMgZm9jdXNlZCBiZWZvcmUuXG4gICAgICAgICAgICBlbGVtZW50LmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCB2aWV3VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgbmdDb250cm9sKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2w7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBmcmFjdGlvblNlcGFyYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmZyYWN0aW9uU2VwYXJhdG9yO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgZ3JvdXBTZXBhcmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5ncm91cFNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcblxuICAgIHByaXZhdGUgY29uZmlnOiBLYnFOdW1iZXJJbnB1dExvY2FsZUNvbmZpZztcblxuICAgIHByaXZhdGUgdmFsdWVGcm9tUGFzdGU6IG51bWJlciB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3N0ZXAnKSBzdGVwOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2JpZy1zdGVwJykgYmlnU3RlcDogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdtaW4nKSBtaW46IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbWF4JykgbWF4OiBzdHJpbmcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoS0JRX0xPQ0FMRV9TRVJWSUNFKSBwcml2YXRlIGxvY2FsZVNlcnZpY2U/OiBLYnFMb2NhbGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3RlcCA9IGlzRGlnaXQoc3RlcCkgPyBwYXJzZUZsb2F0KHN0ZXApIDogU01BTExfU1RFUDtcbiAgICAgICAgdGhpcy5iaWdTdGVwID0gaXNEaWdpdChiaWdTdGVwKSA/IHBhcnNlRmxvYXQoYmlnU3RlcCkgOiBCSUdfU1RFUDtcbiAgICAgICAgdGhpcy5taW4gPSBpc0RpZ2l0KG1pbikgPyBwYXJzZUZsb2F0KG1pbikgOiAtSW5maW5pdHk7XG4gICAgICAgIHRoaXMubWF4ID0gaXNEaWdpdChtYXgpID8gcGFyc2VGbG9hdChtYXgpIDogSW5maW5pdHk7XG5cbiAgICAgICAgaWYgKCd2YWx1ZUFzTnVtYmVyJyBpbiB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5uYXRpdmVFbGVtZW50KSwgJ3ZhbHVlQXNOdW1iZXInLCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBwYXJzZUZsb2F0KG5vcm1hbGl6ZVNwbGl0dGVyKHRoaXMudmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4ocmVzKSA/IG51bGwgOiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2U/LmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKHRoaXMudXBkYXRlTG9jYWxlUGFyYW1zKTtcblxuICAgICAgICBpZiAoIWxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRhaW5lckNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN2YU9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIGZvY3VzQ2hhbmdlZChpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGlzRm9jdXNlZCAhPT0gdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgICAgY29uc3QgbWludXNlcyA9IFtOVU1QQURfTUlOVVMsIERBU0gsIEZGX01JTlVTXTtcbiAgICAgICAgY29uc3Qgc2VydmljZUtleXMgPSBbREVMRVRFLCBCQUNLU1BBQ0UsIFRBQiwgRVNDQVBFLCBFTlRFUl07XG4gICAgICAgIGNvbnN0IGFycm93cyA9IFtMRUZUX0FSUk9XLCBSSUdIVF9BUlJPV107XG4gICAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gW0hPTUUsIEVORF0uY29uY2F0KGFycm93cykuY29uY2F0KHNlcnZpY2VLZXlzKS5jb25jYXQobWludXNlcyk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMuaW50ZWdlciAmJiB0aGlzLmlzUGVyaW9kKGV2ZW50KSkgfHxcbiAgICAgICAgICAgIChtaW51c2VzLmluY2x1ZGVzKGtleUNvZGUpICYmICh0aGlzLnZpZXdWYWx1ZS5pbmNsdWRlcyhldmVudC5rZXkpIHx8IHRoaXMubWluID49IDApKSB8fFxuICAgICAgICAgICAgKHRoaXMuaXNQZXJpb2QoZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSB0aGlzLmZyYWN0aW9uU2VwYXJhdG9yICYmXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3VmFsdWUuaW5kZXhPZih0aGlzLmZyYWN0aW9uU2VwYXJhdG9yKSAhPT0gLTEpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93ZWRLZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xIHx8IFtcbiAgICAgICAgICAgICAgICBpc1NlbGVjdEFsbCxcbiAgICAgICAgICAgICAgICBpc0NvcHksXG4gICAgICAgICAgICAgICAgdGhpcy5pc0N0cmxWLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNDdHJsWCxcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3RybFosXG4gICAgICAgICAgICAgICAgaXNGdW5jdGlvbktleSxcbiAgICAgICAgICAgICAgICB0aGlzLmlzUGVyaW9kXG4gICAgICAgICAgICBdLnNvbWUoKGZuKSA9PiBmbihldmVudCkpKSB7XG4gICAgICAgICAgICAvLyBsZXQgaXQgaGFwcGVuLCBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgaXQgaXMgbm90IGEgbnVtYmVyIGFuZCBzdG9wIHRoZSBrZXlwcmVzc1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgKCFpc051bWJlcktleShldmVudCkgJiYgIWlzTnVtcGFkS2V5KGV2ZW50KSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3RlcHNcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBldmVudC5zaGlmdEtleSA/IHRoaXMuYmlnU3RlcCA6IHRoaXMuc3RlcDtcblxuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IFVQX0FSUk9XKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwVXAoc3RlcCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBET1dOX0FSUk9XKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwRG93bihzdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXQoZXZlbnQ6IElucHV0RXZlbnQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlTGVuZ3RoID0gdGhpcy5mb3JtYXROdW1iZXIodGhpcy52YWx1ZSk/Lmxlbmd0aCB8fCAwO1xuICAgICAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvblN0YXJ0ID0gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8IDA7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcm9tUGFzdGUgPSBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRGcm9tUGFzdGUnO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgICAgICAgICBpZiAoZnJvbVBhc3RlKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdE51bWJlcih0aGlzLnZhbHVlRnJvbVBhc3RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLyp0aGlzLnZpZXdWYWx1ZSBpcyByYXcgYW5kIHNob3VsZCBiZSByZWZvcm1hdHRlZCB0byBsb2NhbGl6ZWQgbnVtYmVyICovXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdFZpZXdWYWx1ZSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2l0aFRob3VzYW5kU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFdoZW5TZXBhcmF0b3JBZGRlZCA9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKHRoaXMudmFsdWUpID49IDEwMDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyh0aGlzLnZpZXdWYWx1ZS5sZW5ndGggLSBjdXJyZW50VmFsdWVMZW5ndGgpID09PSBvZmZzZXRXaGVuU2VwYXJhdG9yQWRkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgc2VsZWN0aW9uIHRvIHRoZSBsZWZ0L3JpZ2h0IGlmIHNlcGFyYXRvciB3YXMgYWRkZWQvcmVtb3ZlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uU3RhcnQgKyBNYXRoLnNpZ24odGhpcy52aWV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFZhbHVlTGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGlvblN0YXJ0JywgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uRW5kJywgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKGZvcm1hdHRlZFZhbHVlLCAhZnJvbVBhc3RlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld1ZhbHVlICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdUb01vZGVsVXBkYXRlKGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy52YWx1ZUZyb21QYXN0ZSA9IGNoZWNrQW5kTm9ybWFsaXplTG9jYWxpemVkTnVtYmVyKFxuICAgICAgICAgICAgZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5pZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlRnJvbVBhc3RlID09PSBudWxsIHx8IGlzTmFOKHRoaXMudmFsdWVGcm9tUGFzdGUpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW50ZWdlciAmJiBpc0Zsb2F0KHRoaXMudmFsdWVGcm9tUGFzdGUudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gTnVtYmVyLnBhcnNlSW50KHRoaXMudmFsdWVGcm9tUGFzdGUudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKHRoaXMuZm9ybWF0TnVtYmVyKHBhcnNlZFZhbHVlKSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdUb01vZGVsVXBkYXRlKHBhcnNlZFZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlcFVwKHN0ZXA6IG51bWJlcikge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICBjb25zdCByZXMgPSBNYXRoLm1heChNYXRoLm1pbihhZGQodGhpcy52YWx1ZSB8fCAwLCBzdGVwKSwgdGhpcy5tYXgpLCB0aGlzLm1pbik7XG5cbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodGhpcy5mb3JtYXROdW1iZXIocmVzKSk7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSByZXM7XG4gICAgICAgIHRoaXMuY3ZhT25DaGFuZ2UocmVzKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHJlcyk7XG4gICAgfVxuXG4gICAgc3RlcERvd24oc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IE1hdGgubWluKE1hdGgubWF4KGFkZCh0aGlzLnZhbHVlIHx8IDAsIC1zdGVwKSwgdGhpcy5taW4pLCB0aGlzLm1heCk7XG5cbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodGhpcy5mb3JtYXROdW1iZXIocmVzKSk7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSByZXM7XG4gICAgICAgIHRoaXMuY3ZhT25DaGFuZ2UocmVzKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHJlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RGVmYXVsdFBhcmFtcygpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBLQlFfSU5QVVRfTlVNQkVSX0RFRkFVTFRfQ09ORklHVVJBVElPTjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ3RybFYgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgPT09IFYgJiYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaXNDdHJsWCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gZXZlbnQua2V5Q29kZSA9PT0gWCAmJiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBpc0N0cmxaID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBldmVudC5rZXlDb2RlID09PSBaICYmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGlzUGVyaW9kID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwU2VwYXJhdG9yLmluY2x1ZGVzKGV2ZW50LmtleSkgfHwgW3RoaXMuZnJhY3Rpb25TZXBhcmF0b3IsICcuJ10uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjdmFPbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgc2V0Vmlld1ZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsLCBzYXZlUG9zaXRpb246IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuXG4gICAgICAgIGlmIChzYXZlUG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uU3RhcnQnLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGlvbkVuZCcsIGN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmlld1RvTW9kZWxVcGRhdGUobmV3VmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbmV3VmFsdWUgPT09IG51bGwgPyBudWxsIDogK25vcm1hbGl6ZU51bWJlcihuZXdWYWx1ZSwgdGhpcy5jb25maWcpO1xuXG4gICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRWaWV3VmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIHdlIGp1c3QgbmVlZCB0byBza2lwIHRoZSBtaW51cyBzaWduIGFuZCBub3QgZG8gYW55IGZvcm1hdHRpbmdcbiAgICAgICAgaWYgKHRoaXMudmlld1ZhbHVlID09PSAnLScpIHJldHVybiB0aGlzLnZpZXdWYWx1ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy52aWV3VmFsdWUgPT09ICcnIHx8XG4gICAgICAgICAgICBOdW1iZXIuaXNOYU4oK25vcm1hbGl6ZU51bWJlcih0aGlzLnZpZXdWYWx1ZSwgdGhpcy5jb25maWcpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID1cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXBhcmF0b3IuaW5jbHVkZXMoJyAnKSAmJiB0aGlzLmZyYWN0aW9uU2VwYXJhdG9yID09PSAnLCcgPyAvWywuXS8gOiB0aGlzLmZyYWN0aW9uU2VwYXJhdG9yO1xuXG4gICAgICAgIGNvbnN0IFtpbnRQYXJ0LCBmcmFjdGlvblBhcnRdID0gdGhpcy52aWV3VmFsdWVcbiAgICAgICAgICAgIC5zcGxpdChzZXBhcmF0b3IpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZVBhcnQpID0+IG5vcm1hbGl6ZU51bWJlcih2YWx1ZVBhcnQsIHRoaXMuY29uZmlnKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9jYWxpemVkTnVtYmVyRnJvbVBhcnRzKCtpbnRQYXJ0LCBmcmFjdGlvblBhcnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0TnVtYmVyKHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBbaW50UGFydCwgZnJhY3Rpb25QYXJ0XSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2NhbGl6ZWROdW1iZXJGcm9tUGFydHMoK2ludFBhcnQsIGZyYWN0aW9uUGFydCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVMb2NhbGl6ZWROdW1iZXJGcm9tUGFydHMoaW50UGFydDogbnVtYmVyLCBmcmFjdGlvblBhcnQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuICAgICAgICAgICAgdXNlR3JvdXBpbmc6IHRoaXMud2l0aFRob3VzYW5kU2VwYXJhdG9yLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyMFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLndpdGhUaG91c2FuZFNlcGFyYXRvciAmJiB0aGlzLmNvbmZpZy5zdGFydEZvcm1hdHRpbmdGcm9tKSB7XG4gICAgICAgICAgICBmb3JtYXRPcHRpb25zLnVzZUdyb3VwaW5nID0gaW50UGFydCA+PSBNYXRoLnBvdygxMCwgdGhpcy5jb25maWcuc3RhcnRGb3JtYXR0aW5nRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbGVJZCA9ICF0aGlzLmxvY2FsZVNlcnZpY2UgfHwgdGhpcy5sb2NhbGVTZXJ2aWNlLmlkID09PSAnZXMtTEEnID8gJ3J1LVJVJyA6IHRoaXMubG9jYWxlU2VydmljZS5pZDtcblxuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlSWQsIGZvcm1hdE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEludFBhcnQgPSBmb3JtYXROdW1iZXJXaXRoTG9jYWxlKGludFBhcnQsIGZvcm1hdHRlciwgdGhpcy5jb25maWcpO1xuXG4gICAgICAgIGlmIChmcmFjdGlvblBhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZEludFBhcnQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm9ybWF0dGVkRnJhY3Rpb25QYXJ0OiBzdHJpbmcgPSAnJztcblxuICAgICAgICBmb3IgKGNvbnN0IG51bUNoYXIgb2YgZnJhY3Rpb25QYXJ0KSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRGcmFjdGlvblBhcnQgKz0gZm9ybWF0dGVyLmZvcm1hdCgrbnVtQ2hhcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkSW50UGFydH0ke3RoaXMuZnJhY3Rpb25TZXBhcmF0b3J9JHtmb3JtYXR0ZWRGcmFjdGlvblBhcnR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZVBhcmFtcyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWcgPSB0aGlzLmxvY2FsZVNlcnZpY2UhLmdldFBhcmFtcygnaW5wdXQnKS5udW1iZXI7XG5cbiAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodGhpcy5mb3JtYXROdW1iZXIodGhpcy52YWx1ZSkpO1xuICAgIH07XG59XG4iXX0=
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNILFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXlDLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUNILFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixHQUFHLEVBQ0gsS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLEVBQ2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsRUFDUixDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDSixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDSCxnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUMvQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZixrQkFBa0IsRUFDckIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFFL0IsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUV0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QUFjO2tCQVoxQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO29CQUM1QyxJQUFJLEVBQUU7d0JBQ0YsUUFBUSxFQUFFLHFCQUFxQjt3QkFDL0IsU0FBUyxFQUFFLG9CQUFvQjt3QkFDL0IsU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsV0FBVyxFQUFFLG1CQUFtQjt3QkFDaEMsU0FBUyxFQUFFLGlCQUFpQjtxQkFDL0I7aUJBQ0o7OzBCQTRIUSxTQUFTOzJCQUFDLE1BQU07OzBCQUNoQixTQUFTOzJCQUFDLFVBQVU7OzBCQUNwQixTQUFTOzJCQUFDLEtBQUs7OzBCQUNmLFNBQVM7MkJBQUMsS0FBSzs7MEJBQ2YsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7eUNBdEcxQyxPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSXRDLE9BQU87c0JBRE4sS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJTixxQkFBcUI7c0JBRHBCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBT3RDLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFJRixLQUFLO3NCQURSLEtBQUs7Z0JBb0JGLFFBQVE7c0JBRFgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIEF0dHJpYnV0ZSxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIEJBQ0tTUEFDRSxcbiAgICBEQVNILFxuICAgIERFTEVURSxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVORCxcbiAgICBFTlRFUixcbiAgICBFU0NBUEUsXG4gICAgRkZfTUlOVVMsXG4gICAgSE9NRSxcbiAgICBpc0NvcHksXG4gICAgaXNGdW5jdGlvbktleSxcbiAgICBpc051bWJlcktleSxcbiAgICBpc051bXBhZEtleSxcbiAgICBpc1NlbGVjdEFsbCxcbiAgICBMRUZUX0FSUk9XLFxuICAgIE5VTVBBRF9NSU5VUyxcbiAgICBSSUdIVF9BUlJPVyxcbiAgICBUQUIsXG4gICAgVVBfQVJST1csXG4gICAgVixcbiAgICBYLFxuICAgIFpcbn0gZnJvbSAnQGtvb2JpcS9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBjaGVja0FuZE5vcm1hbGl6ZUxvY2FsaXplZE51bWJlcixcbiAgICBmb3JtYXROdW1iZXJXaXRoTG9jYWxlLFxuICAgIEtCUV9ERUZBVUxUX1BSRUNJU0lPTl9TRVBBUkFUT1IsXG4gICAgS0JRX0xPQ0FMRV9TRVJWSUNFLFxuICAgIEticUxvY2FsZVNlcnZpY2UsXG4gICAgS2JxTnVtYmVySW5wdXRMb2NhbGVDb25maWcsXG4gICAgbm9ybWFsaXplTnVtYmVyLFxuICAgIHJ1UlVGb3JtYXR0ZXJzRGF0YVxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgS0JRX0lOUFVUX05VTUJFUl9ERUZBVUxUX0NPTkZJR1VSQVRJT04gPSBydVJVRm9ybWF0dGVyc0RhdGEuaW5wdXQubnVtYmVyO1xuXG5leHBvcnQgY29uc3QgQklHX1NURVAgPSAxMDtcbmV4cG9ydCBjb25zdCBTTUFMTF9TVEVQID0gMTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNwbGl0dGVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLnJlcGxhY2UoLywvZywgS0JRX0RFRkFVTFRfUFJFQ0lTSU9OX1NFUEFSQVRPUikgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvYXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXi0/XFxkK1xcLlxcZCskLy50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14tP1xcZCskLy50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlnaXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0Zsb2F0KHZhbHVlKSB8fCBpc0ludCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYXJyID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChLQlFfREVGQVVMVF9QUkVDSVNJT05fU0VQQVJBVE9SKTtcblxuICAgIHJldHVybiBhcnIubGVuZ3RoID09PSAxID8gMSA6IE1hdGgucG93KDEwLCBhcnJbMV0ubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZCh2YWx1ZTE6IG51bWJlciwgdmFsdWUyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHByZWNpc2lvbiA9IE1hdGgubWF4KGdldFByZWNpc2lvbih2YWx1ZTEpLCBnZXRQcmVjaXNpb24odmFsdWUyKSk7XG5cbiAgICByZXR1cm4gKHZhbHVlMSAqIHByZWNpc2lvbiArIHZhbHVlMiAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG59XG5cbmV4cG9ydCBjb25zdCBLQlFfTlVNQkVSX0lOUFVUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gS2JxTnVtYmVySW5wdXQpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogYGlucHV0W2ticU51bWJlcklucHV0XWAsXG4gICAgZXhwb3J0QXM6ICdrYnFOdW1lcmljYWxJbnB1dCcsXG4gICAgcHJvdmlkZXJzOiBbS0JRX05VTUJFUl9JTlBVVF9WQUxVRV9BQ0NFU1NPUl0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGJsdXIpJzogJ2ZvY3VzQ2hhbmdlZChmYWxzZSknLFxuICAgICAgICAnKGZvY3VzKSc6ICdmb2N1c0NoYW5nZWQodHJ1ZSknLFxuICAgICAgICAnKHBhc3RlKSc6ICdvblBhc3RlKCRldmVudCknLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5RG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhpbnB1dCknOiAnb25JbnB1dCgkZXZlbnQpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxTnVtYmVySW5wdXQgaW1wbGVtZW50cyBLYnFGb3JtRmllbGRDb250cm9sPGFueT4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2VzIChlaXRoZXIgZHVlIHRvIHVzZXIgaW5wdXQgb3IgcHJvZ3JhbW1hdGljIGNoYW5nZSkuICovXG4gICAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaGFzIGNoYW5nZWQgKi9cbiAgICBkaXNhYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIHJlYWRvbmx5IHN0YXRlQ2hhbmdlczogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBpZDogc3RyaW5nO1xuXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIGVtcHR5OiBib29sZWFuO1xuXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgICBlcnJvclN0YXRlOiBib29sZWFuO1xuXG4gICAgY29udHJvbFR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgaW5wdXQgYW5kIHBhc3Rpbmcgb2YgaW50ZWdlcnMgb25seS5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBpbnRlZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGJpZ1N0ZXA6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgc3RlcDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBtaW46IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgbWF4OiBudW1iZXI7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB3aXRoVGhvdXNhbmRTZXBhcmF0b3I6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogSW5jbHVkZSB0aG91c2FuZCBzZXBhcmF0b3IgZnJvbSBjdXN0b20gaW5kZXguIEZvciBleGFtcGxlLCBpdCB3aWxsIGJlIHVzZWZ1bCBpbiB0YWJsZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGFydEZvcm1hdHRpbmdGcm9tPzogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgdmFsdWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKG9sZFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodGhpcy5mb3JtYXROdW1iZXIodmFsdWUpKTtcblxuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgfCBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVkID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBudWxsIGNoZWNrIHRoZSBgYmx1cmAgbWV0aG9kLCBiZWNhdXNlIGl0J3MgdW5kZWZpbmVkIGR1cmluZyBTU1IuXG4gICAgICAgIGlmIChuZXdWYWx1ZSAmJiBlbGVtZW50LmJsdXIpIHtcbiAgICAgICAgICAgIC8vIE5vcm1hbGx5LCBuYXRpdmUgaW5wdXQgZWxlbWVudHMgYXV0b21hdGljYWxseSBibHVyIGlmIHRoZXkgdHVybiBkaXNhYmxlZC4gVGhpcyBiZWhhdmlvclxuICAgICAgICAgICAgLy8gaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgaXQgd291bGQgbWVhbiB0aGF0IGl0IHRyaWdnZXJzIGFub3RoZXIgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSxcbiAgICAgICAgICAgIC8vIHdoaWNoIHRoZW4gY2F1c2VzIGEgY2hhbmdlZCBhZnRlciBjaGVja2VkIGVycm9yIGlmIHRoZSBpbnB1dCBlbGVtZW50IHdhcyBmb2N1c2VkIGJlZm9yZS5cbiAgICAgICAgICAgIGVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHZpZXdWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIGdldCBuZ0NvbnRyb2woKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGZyYWN0aW9uU2VwYXJhdG9yKCk6IEticU51bWJlcklucHV0TG9jYWxlQ29uZmlnWydmcmFjdGlvblNlcGFyYXRvciddIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmZyYWN0aW9uU2VwYXJhdG9yO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgZ3JvdXBTZXBhcmF0b3IoKTogS2JxTnVtYmVySW5wdXRMb2NhbGVDb25maWdbJ2dyb3VwU2VwYXJhdG9yJ10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuZ3JvdXBTZXBhcmF0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgICBwcml2YXRlIGNvbmZpZzogS2JxTnVtYmVySW5wdXRMb2NhbGVDb25maWc7XG5cbiAgICBwcml2YXRlIHZhbHVlRnJvbVBhc3RlOiBudW1iZXIgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBAQXR0cmlidXRlKCdzdGVwJykgc3RlcDogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdiaWctc3RlcCcpIGJpZ1N0ZXA6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbWluJykgbWluOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ21heCcpIG1heDogc3RyaW5nLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEtCUV9MT0NBTEVfU0VSVklDRSkgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlPzogS2JxTG9jYWxlU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnN0ZXAgPSBpc0RpZ2l0KHN0ZXApID8gcGFyc2VGbG9hdChzdGVwKSA6IFNNQUxMX1NURVA7XG4gICAgICAgIHRoaXMuYmlnU3RlcCA9IGlzRGlnaXQoYmlnU3RlcCkgPyBwYXJzZUZsb2F0KGJpZ1N0ZXApIDogQklHX1NURVA7XG4gICAgICAgIHRoaXMubWluID0gaXNEaWdpdChtaW4pID8gcGFyc2VGbG9hdChtaW4pIDogLUluZmluaXR5O1xuICAgICAgICB0aGlzLm1heCA9IGlzRGlnaXQobWF4KSA/IHBhcnNlRmxvYXQobWF4KSA6IEluZmluaXR5O1xuXG4gICAgICAgIGlmICgndmFsdWVBc051bWJlcicgaW4gdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMubmF0aXZlRWxlbWVudCksICd2YWx1ZUFzTnVtYmVyJywge1xuICAgICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gcGFyc2VGbG9hdChub3JtYWxpemVTcGxpdHRlcih0aGlzLnZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHJlcykgPyBudWxsIDogcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCFsb2NhbGVTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgb25Db250YWluZXJDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBmb2N1c0NoYW5nZWQoaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0ZvY3VzZWQgIT09IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGNvbnN0IG1pbnVzZXMgPSBbTlVNUEFEX01JTlVTLCBEQVNILCBGRl9NSU5VU107XG4gICAgICAgIGNvbnN0IHNlcnZpY2VLZXlzID0gW0RFTEVURSwgQkFDS1NQQUNFLCBUQUIsIEVTQ0FQRSwgRU5URVJdO1xuICAgICAgICBjb25zdCBhcnJvd3MgPSBbTEVGVF9BUlJPVywgUklHSFRfQVJST1ddO1xuICAgICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IFtIT01FLCBFTkRdLmNvbmNhdChhcnJvd3MpLmNvbmNhdChzZXJ2aWNlS2V5cykuY29uY2F0KG1pbnVzZXMpO1xuXG4gICAgICAgIC8vIHNob3VsZCBwYXJzZSBub3JtYWxpemVkIGZyYWN0aW9uU2VwYXJhdG9yXG4gICAgICAgIGNvbnN0IHZpZXdWYWx1ZVRvQmVDaGVja2VkID0gbm9ybWFsaXplTnVtYmVyKHRoaXMudmlld1ZhbHVlLCB0aGlzLmNvbmZpZyk7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkU2tpcEZvckludGVnZXJNb2RlID0gdGhpcy5pbnRlZ2VyICYmIHRoaXMuaXNQZXJpb2QoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01pbnVzQWxsb3dlZCA9IG1pbnVzZXMuaW5jbHVkZXMoa2V5Q29kZSkgJiYgKHRoaXMudmlld1ZhbHVlLmluY2x1ZGVzKGV2ZW50LmtleSkgfHwgdGhpcy5taW4gPj0gMCk7XG4gICAgICAgIGNvbnN0IGlzU2lnbkFuZEZyYWN0aW9uU2VwQWxyZWFkeUV4aXN0cyA9XG4gICAgICAgICAgICB0aGlzLmlzUGVyaW9kKGV2ZW50KSAmJlxuICAgICAgICAgICAgW3RoaXMuZnJhY3Rpb25TZXBhcmF0b3IsIEtCUV9ERUZBVUxUX1BSRUNJU0lPTl9TRVBBUkFUT1JdLmluY2x1ZGVzKGV2ZW50LmtleSkgJiZcbiAgICAgICAgICAgIHZpZXdWYWx1ZVRvQmVDaGVja2VkLmluZGV4T2YoS0JRX0RFRkFVTFRfUFJFQ0lTSU9OX1NFUEFSQVRPUikgIT09IC0xO1xuXG4gICAgICAgIGlmIChzaG91bGRTa2lwRm9ySW50ZWdlck1vZGUgfHwgaXNNaW51c0FsbG93ZWQgfHwgaXNTaWduQW5kRnJhY3Rpb25TZXBBbHJlYWR5RXhpc3RzKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dlZEtleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTEgfHwgW1xuICAgICAgICAgICAgICAgIGlzU2VsZWN0QWxsLFxuICAgICAgICAgICAgICAgIGlzQ29weSxcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3RybFYsXG4gICAgICAgICAgICAgICAgdGhpcy5pc0N0cmxYLFxuICAgICAgICAgICAgICAgIHRoaXMuaXNDdHJsWixcbiAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaXNQZXJpb2RcbiAgICAgICAgICAgIF0uc29tZSgoZm4pID0+IGZuKGV2ZW50KSkpIHtcbiAgICAgICAgICAgIC8vIGxldCBpdCBoYXBwZW4sIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0xldHRlciA9ICFpc051bWJlcktleShldmVudCkgJiYgIWlzTnVtcGFkS2V5KGV2ZW50KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhhdCBpdCBpcyBub3QgYSBudW1iZXIgYW5kIHN0b3AgdGhlIGtleXByZXNzXG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSB8fCBpc0xldHRlcikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gcHJvY2VzcyBzdGVwc1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5iaWdTdGVwIDogdGhpcy5zdGVwO1xuXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gVVBfQVJST1cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBVcChzdGVwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IERPV05fQVJST1cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBEb3duKHN0ZXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dChldmVudDogSW5wdXRFdmVudCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVMZW5ndGggPSB0aGlzLmZvcm1hdE51bWJlcih0aGlzLnZhbHVlKT8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0aW9uU3RhcnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgfHwgMDtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21QYXN0ZSA9IGV2ZW50LmlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21QYXN0ZSc7XG4gICAgICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChmcm9tUGFzdGUpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZm9ybWF0TnVtYmVyKHRoaXMudmFsdWVGcm9tUGFzdGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKnRoaXMudmlld1ZhbHVlIGlzIHJhdyBhbmQgc2hvdWxkIGJlIHJlZm9ybWF0dGVkIHRvIGxvY2FsaXplZCBudW1iZXIgKi9cbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZm9ybWF0Vmlld1ZhbHVlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy53aXRoVGhvdXNhbmRTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0V2hlblNlcGFyYXRvckFkZGVkID0gMjtcblxuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5hYnModGhpcy52YWx1ZSkgPj0gMTAwMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKHRoaXMudmlld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRWYWx1ZUxlbmd0aCkgPT09IG9mZnNldFdoZW5TZXBhcmF0b3JBZGRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW92ZSBzZWxlY3Rpb24gdG8gdGhlIGxlZnQvcmlnaHQgaWYgc2VwYXJhdG9yIHdhcyBhZGRlZC9yZW1vdmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb25TdGFydCArIE1hdGguc2lnbih0aGlzLnZpZXdWYWx1ZS5sZW5ndGggLSBjdXJyZW50VmFsdWVMZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uU3RhcnQnLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3Rpb25FbmQnLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoZm9ybWF0dGVkVmFsdWUsICFmcm9tUGFzdGUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy52aWV3VmFsdWUgIT09ICctJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld1RvTW9kZWxVcGRhdGUoZm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLnZhbHVlRnJvbVBhc3RlID0gY2hlY2tBbmROb3JtYWxpemVMb2NhbGl6ZWROdW1iZXIoXG4gICAgICAgICAgICBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JyksXG4gICAgICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2U/LmlkXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsdWVGcm9tUGFzdGUgPT09IG51bGwgfHwgaXNOYU4odGhpcy52YWx1ZUZyb21QYXN0ZSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlZ2VyICYmIGlzRmxvYXQodGhpcy52YWx1ZUZyb21QYXN0ZS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBOdW1iZXIucGFyc2VJbnQodGhpcy52YWx1ZUZyb21QYXN0ZS50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUodGhpcy5mb3JtYXROdW1iZXIocGFyc2VkVmFsdWUpKTtcbiAgICAgICAgICAgIHRoaXMudmlld1RvTW9kZWxVcGRhdGUocGFyc2VkVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGVwVXAoc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IE1hdGgubWF4KE1hdGgubWluKGFkZCh0aGlzLnZhbHVlIHx8IDAsIHN0ZXApLCB0aGlzLm1heCksIHRoaXMubWluKTtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcihyZXMpKTtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHJlcztcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShyZXMpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocmVzKTtcbiAgICB9XG5cbiAgICBzdGVwRG93bihzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gTWF0aC5taW4oTWF0aC5tYXgoYWRkKHRoaXMudmFsdWUgfHwgMCwgLXN0ZXApLCB0aGlzLm1pbiksIHRoaXMubWF4KTtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcihyZXMpKTtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHJlcztcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShyZXMpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocmVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXREZWZhdWx0UGFyYW1zKCkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IEtCUV9JTlBVVF9OVU1CRVJfREVGQVVMVF9DT05GSUdVUkFUSU9OO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDdHJsViA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gZXZlbnQua2V5Q29kZSA9PT0gViAmJiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBpc0N0cmxYID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBldmVudC5rZXlDb2RlID09PSBYICYmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGlzQ3RybFogPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgPT09IFogJiYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaXNQZXJpb2QgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXBhcmF0b3IuaW5jbHVkZXMoZXZlbnQua2V5KSB8fFxuICAgICAgICAgICAgW3RoaXMuZnJhY3Rpb25TZXBhcmF0b3IsIEtCUV9ERUZBVUxUX1BSRUNJU0lPTl9TRVBBUkFUT1JdLmluY2x1ZGVzKGV2ZW50LmtleSlcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjdmFPbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgc2V0Vmlld1ZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsLCBzYXZlUG9zaXRpb246IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuXG4gICAgICAgIGlmIChzYXZlUG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uU3RhcnQnLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGlvbkVuZCcsIGN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmlld1RvTW9kZWxVcGRhdGUobmV3VmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbmV3VmFsdWUgPT09IG51bGwgPyBudWxsIDogK25vcm1hbGl6ZU51bWJlcihuZXdWYWx1ZSwgdGhpcy5jb25maWcpO1xuXG4gICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRWaWV3VmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIHdlIGp1c3QgbmVlZCB0byBza2lwIHRoZSBtaW51cyBzaWduIGFuZCBub3QgZG8gYW55IGZvcm1hdHRpbmdcbiAgICAgICAgaWYgKHRoaXMudmlld1ZhbHVlID09PSAnLScpIHJldHVybiB0aGlzLnZpZXdWYWx1ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnZpZXdWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy52aWV3VmFsdWUgPT09ICcnIHx8XG4gICAgICAgICAgICBOdW1iZXIuaXNOYU4oK25vcm1hbGl6ZU51bWJlcih0aGlzLnZpZXdWYWx1ZSwgdGhpcy5jb25maWcpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID1cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZXBhcmF0b3IuaW5jbHVkZXMoJyAnKSAmJiB0aGlzLmZyYWN0aW9uU2VwYXJhdG9yID09PSAnLCcgPyAvWywuXS8gOiB0aGlzLmZyYWN0aW9uU2VwYXJhdG9yO1xuXG4gICAgICAgIGNvbnN0IFtpbnRQYXJ0LCBmcmFjdGlvblBhcnRdID0gdGhpcy52aWV3VmFsdWVcbiAgICAgICAgICAgIC5zcGxpdChzZXBhcmF0b3IpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZVBhcnQpID0+IG5vcm1hbGl6ZU51bWJlcih2YWx1ZVBhcnQsIHRoaXMuY29uZmlnKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9jYWxpemVkTnVtYmVyRnJvbVBhcnRzKCtpbnRQYXJ0LCBmcmFjdGlvblBhcnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0TnVtYmVyKHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBbaW50UGFydCwgZnJhY3Rpb25QYXJ0XSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoS0JRX0RFRkFVTFRfUFJFQ0lTSU9OX1NFUEFSQVRPUik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9jYWxpemVkTnVtYmVyRnJvbVBhcnRzKCtpbnRQYXJ0LCBmcmFjdGlvblBhcnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTG9jYWxpemVkTnVtYmVyRnJvbVBhcnRzKGludFBhcnQ6IG51bWJlciwgZnJhY3Rpb25QYXJ0Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHVzZUdyb3VwaW5nOiB0aGlzLndpdGhUaG91c2FuZFNlcGFyYXRvcixcbiAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMjBcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy53aXRoVGhvdXNhbmRTZXBhcmF0b3IgJiYgdGhpcy5jb25maWcuc3RhcnRGb3JtYXR0aW5nRnJvbSkge1xuICAgICAgICAgICAgZm9ybWF0T3B0aW9ucy51c2VHcm91cGluZyA9IGludFBhcnQgPj0gTWF0aC5wb3coMTAsIHRoaXMuY29uZmlnLnN0YXJ0Rm9ybWF0dGluZ0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxlSWQgPSAhdGhpcy5sb2NhbGVTZXJ2aWNlIHx8IHRoaXMubG9jYWxlU2VydmljZS5pZCA9PT0gJ2VzLUxBJyA/ICdydS1SVScgOiB0aGlzLmxvY2FsZVNlcnZpY2UuaWQ7XG5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZUlkLCBmb3JtYXRPcHRpb25zKTtcblxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRJbnRQYXJ0ID0gZm9ybWF0TnVtYmVyV2l0aExvY2FsZShpbnRQYXJ0LCBmb3JtYXR0ZXIsIHRoaXMuY29uZmlnKTtcblxuICAgICAgICBpZiAoZnJhY3Rpb25QYXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRJbnRQYXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZvcm1hdHRlZEZyYWN0aW9uUGFydDogc3RyaW5nID0gJyc7XG5cbiAgICAgICAgZm9yIChjb25zdCBudW1DaGFyIG9mIGZyYWN0aW9uUGFydCkge1xuICAgICAgICAgICAgZm9ybWF0dGVkRnJhY3Rpb25QYXJ0ICs9IGZvcm1hdHRlci5mb3JtYXQoK251bUNoYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEludFBhcnR9JHt0aGlzLmZyYWN0aW9uU2VwYXJhdG9yfSR7Zm9ybWF0dGVkRnJhY3Rpb25QYXJ0fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbGVQYXJhbXMgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5sb2NhbGVTZXJ2aWNlIS5nZXRQYXJhbXMoJ2lucHV0JykubnVtYmVyO1xuXG4gICAgICAgIHRoaXMuc2V0Vmlld1ZhbHVlKHRoaXMuZm9ybWF0TnVtYmVyKHRoaXMudmFsdWUpKTtcbiAgICB9O1xufVxuIl19
@@ -0,0 +1,105 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { ChangeDetectorRef, Component, ContentChild, inject, Input } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { kbqInjectNativeElement, PopUpPlacements, PopUpTriggers } from '@koobiq/components/core';
5
+ import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
6
+ import { KbqNavbarFocusableItem, KbqNavbarRectangleElement, KbqNavbarTitle } from './navbar-item.component';
7
+ import * as i0 from "@angular/core";
8
+ export class KbqNavbarBrand extends KbqTooltipTrigger {
9
+ get isLink() {
10
+ return this.nativeElement.tagName === 'A';
11
+ }
12
+ /** @docs-private */
13
+ get croppedText() {
14
+ const croppedTitleText = this.title?.isOverflown ? this.titleText : '';
15
+ return `${croppedTitleText}`;
16
+ }
17
+ /** @docs-private */
18
+ get hasCroppedText() {
19
+ return !!this.title?.isOverflown;
20
+ }
21
+ /** @docs-private */
22
+ get titleText() {
23
+ return this.collapsedText || this.title?.text || null;
24
+ }
25
+ /** @docs-private */
26
+ get disabled() {
27
+ if (this._disabled !== undefined) {
28
+ return this._disabled;
29
+ }
30
+ return !this.collapsed && !this.hasCroppedText;
31
+ }
32
+ set disabled(value) {
33
+ this._disabled = coerceBooleanProperty(value);
34
+ }
35
+ /** @docs-private */
36
+ get collapsed() {
37
+ return this._collapsed ?? this.rectangleElement.collapsed;
38
+ }
39
+ set collapsed(value) {
40
+ if (this._collapsed !== value) {
41
+ this._collapsed = value;
42
+ this.updateTooltip();
43
+ }
44
+ }
45
+ constructor() {
46
+ super();
47
+ /** @docs-private */
48
+ this.nativeElement = kbqInjectNativeElement();
49
+ /** @docs-private */
50
+ this.changeDetectorRef = inject(ChangeDetectorRef);
51
+ /** @docs-private */
52
+ this.rectangleElement = inject(KbqNavbarRectangleElement);
53
+ /** @docs-private */
54
+ this.navbarFocusableItem = inject(KbqNavbarFocusableItem);
55
+ /** alternative display of the brand name in two lines */
56
+ this.longTitle = false;
57
+ this._collapsed = false;
58
+ this.rectangleElement.state.pipe(takeUntilDestroyed()).subscribe(() => {
59
+ this.collapsed = this.rectangleElement.collapsed;
60
+ this.changeDetectorRef.detectChanges();
61
+ });
62
+ this._trigger = `${PopUpTriggers.Hover}`;
63
+ this.navbarFocusableItem.setTooltip(this);
64
+ this.arrow = false;
65
+ this.offset = 0;
66
+ this.navbarFocusableItem.disabled = !this.isLink;
67
+ }
68
+ ngAfterContentInit() {
69
+ this.updateTooltip();
70
+ }
71
+ updateTooltip() {
72
+ if (this.collapsed) {
73
+ this.content = `${this.titleText || ''}`;
74
+ }
75
+ else if (!this.collapsed && this.hasCroppedText) {
76
+ this.content = this.croppedText;
77
+ }
78
+ if (this.rectangleElement.vertical) {
79
+ this.placement = PopUpPlacements.Right;
80
+ }
81
+ this.changeDetectorRef.markForCheck();
82
+ }
83
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqNavbarBrand, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
84
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: KbqNavbarBrand, selector: "kbq-navbar-brand, [kbq-navbar-brand]", inputs: { longTitle: "longTitle", collapsedText: "collapsedText" }, host: { properties: { "class.kbq-navbar-brand_long-title": "longTitle", "class.kbq-navbar-brand_link": "isLink" }, classAttribute: "kbq-navbar-brand" }, queries: [{ propertyName: "title", first: true, predicate: KbqNavbarTitle, descendants: true }], exportAs: ["kbqNavbarBrand"], usesInheritance: true, ngImport: i0, template: `
85
+ <ng-content />
86
+ `, isInline: true, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-vertical.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand .kbq-navbar-item__arrow-icon{color:var(--kbq-navbar-item-default-content-icon-right)!important}.kbq-navbar-brand.kbq-navbar-brand_link{cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item__arrow-icon{color:var(--kbq-navbar-item-states-hover-content-icon-right)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item__arrow-icon,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item__arrow-icon{color:var(--kbq-navbar-item-states-selected-content-icon-right)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing)}\n"] }); }
87
+ }
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqNavbarBrand, decorators: [{
89
+ type: Component,
90
+ args: [{ selector: 'kbq-navbar-brand, [kbq-navbar-brand]', exportAs: 'kbqNavbarBrand', template: `
91
+ <ng-content />
92
+ `, host: {
93
+ class: 'kbq-navbar-brand',
94
+ '[class.kbq-navbar-brand_long-title]': 'longTitle',
95
+ '[class.kbq-navbar-brand_link]': 'isLink'
96
+ }, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-vertical.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand .kbq-navbar-item__arrow-icon{color:var(--kbq-navbar-item-default-content-icon-right)!important}.kbq-navbar-brand.kbq-navbar-brand_link{cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item__arrow-icon{color:var(--kbq-navbar-item-states-hover-content-icon-right)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item__arrow-icon,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item__arrow-icon{color:var(--kbq-navbar-item-states-selected-content-icon-right)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing)}\n"] }]
97
+ }], ctorParameters: () => [], propDecorators: { title: [{
98
+ type: ContentChild,
99
+ args: [KbqNavbarTitle]
100
+ }], longTitle: [{
101
+ type: Input
102
+ }], collapsedText: [{
103
+ type: Input
104
+ }] } });
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLWJyYW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvbmF2YmFyL25hdmJhci1icmFuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFvQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBaUI1RyxNQUFNLE9BQU8sY0FBZSxTQUFRLGlCQUFpQjtJQW1CakQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUM7SUFDOUMsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixJQUFJLFdBQVc7UUFDWCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdkUsT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixJQUFJLGNBQWM7UUFDZCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUM7SUFDMUQsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixJQUFJLFFBQVE7UUFDUixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQUs7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBRXhCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUlEO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFwRVosb0JBQW9CO1FBQ0Qsa0JBQWEsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBQzVELG9CQUFvQjtRQUNELHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLG9CQUFvQjtRQUNELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3hFLG9CQUFvQjtRQUNELHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBS3hFLHlEQUF5RDtRQUNoRCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBb0Q1QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBS3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztZQUVqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckQsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1FBQzNDLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztrSUF2R1EsY0FBYztzSEFBZCxjQUFjLDRVQVdULGNBQWMscUdBdkJsQjs7S0FFVDs7NEZBVVEsY0FBYztrQkFmMUIsU0FBUzsrQkFDSSxzQ0FBc0MsWUFDdEMsZ0JBQWdCLFlBQ2hCOztLQUVULFFBSUs7d0JBQ0YsS0FBSyxFQUFFLGtCQUFrQjt3QkFDekIscUNBQXFDLEVBQUUsV0FBVzt3QkFDbEQsK0JBQStCLEVBQUUsUUFBUTtxQkFDNUM7d0RBYTZCLEtBQUs7c0JBQWxDLFlBQVk7dUJBQUMsY0FBYztnQkFHbkIsU0FBUztzQkFBakIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgaW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsga2JxSW5qZWN0TmF0aXZlRWxlbWVudCwgUG9wVXBQbGFjZW1lbnRzLCBQb3BVcFRyaWdnZXJzIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxVG9vbHRpcFRyaWdnZXIgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBLYnFOYXZiYXJGb2N1c2FibGVJdGVtLCBLYnFOYXZiYXJSZWN0YW5nbGVFbGVtZW50LCBLYnFOYXZiYXJUaXRsZSB9IGZyb20gJy4vbmF2YmFyLWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrYnEtbmF2YmFyLWJyYW5kLCBba2JxLW5hdmJhci1icmFuZF0nLFxuICAgIGV4cG9ydEFzOiAna2JxTmF2YmFyQnJhbmQnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgYCxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vbmF2YmFyLWJyYW5kLnNjc3MnXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLW5hdmJhci1icmFuZCcsXG4gICAgICAgICdbY2xhc3Mua2JxLW5hdmJhci1icmFuZF9sb25nLXRpdGxlXSc6ICdsb25nVGl0bGUnLFxuICAgICAgICAnW2NsYXNzLmticS1uYXZiYXItYnJhbmRfbGlua10nOiAnaXNMaW5rJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxTmF2YmFyQnJhbmQgZXh0ZW5kcyBLYnFUb29sdGlwVHJpZ2dlciBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hdGl2ZUVsZW1lbnQgPSBrYnFJbmplY3ROYXRpdmVFbGVtZW50KCk7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlY3RhbmdsZUVsZW1lbnQgPSBpbmplY3QoS2JxTmF2YmFyUmVjdGFuZ2xlRWxlbWVudCk7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmF2YmFyRm9jdXNhYmxlSXRlbSA9IGluamVjdChLYnFOYXZiYXJGb2N1c2FibGVJdGVtKTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQENvbnRlbnRDaGlsZChLYnFOYXZiYXJUaXRsZSkgdGl0bGU6IEticU5hdmJhclRpdGxlO1xuXG4gICAgLyoqIGFsdGVybmF0aXZlIGRpc3BsYXkgb2YgdGhlIGJyYW5kIG5hbWUgaW4gdHdvIGxpbmVzICovXG4gICAgQElucHV0KCkgbG9uZ1RpdGxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0b29sdGlwLiBCeSBkZWZhdWx0LCB0aGUgdGV4dCBpcyB0YWtlbiBmcm9tIGticS1uYXZiYXItdGl0bGUuICovXG4gICAgQElucHV0KCkgY29sbGFwc2VkVGV4dDogc3RyaW5nO1xuXG4gICAgZ2V0IGlzTGluaygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQSc7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgY3JvcHBlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY3JvcHBlZFRpdGxlVGV4dCA9IHRoaXMudGl0bGU/LmlzT3ZlcmZsb3duID8gdGhpcy50aXRsZVRleHQgOiAnJztcblxuICAgICAgICByZXR1cm4gYCR7Y3JvcHBlZFRpdGxlVGV4dH1gO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IGhhc0Nyb3BwZWRUZXh0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnRpdGxlPy5pc092ZXJmbG93bjtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCB0aXRsZVRleHQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNlZFRleHQgfHwgdGhpcy50aXRsZT8udGV4dCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZCAmJiAhdGhpcy5oYXNDcm9wcGVkVGV4dDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IGNvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNlZCA/PyB0aGlzLnJlY3RhbmdsZUVsZW1lbnQuY29sbGFwc2VkO1xuICAgIH1cblxuICAgIHNldCBjb2xsYXBzZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbGxhcHNlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IHZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRvb2x0aXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NvbGxhcHNlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5yZWN0YW5nbGVFbGVtZW50LnN0YXRlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IHRoaXMucmVjdGFuZ2xlRWxlbWVudC5jb2xsYXBzZWQ7XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90cmlnZ2VyID0gYCR7UG9wVXBUcmlnZ2Vycy5Ib3Zlcn1gO1xuXG4gICAgICAgIHRoaXMubmF2YmFyRm9jdXNhYmxlSXRlbS5zZXRUb29sdGlwKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuYXJyb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSAwO1xuXG4gICAgICAgIHRoaXMubmF2YmFyRm9jdXNhYmxlSXRlbS5kaXNhYmxlZCA9ICF0aGlzLmlzTGluaztcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlVG9vbHRpcCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVG9vbHRpcCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBgJHt0aGlzLnRpdGxlVGV4dCB8fCAnJ31gO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmhhc0Nyb3BwZWRUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmNyb3BwZWRUZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVjdGFuZ2xlRWxlbWVudC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQgPSBQb3BVcFBsYWNlbWVudHMuUmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiJdfQ==