{"version":3,"file":"isyfact-isy-angular-widgets.mjs","sources":["../../../projects/isy-angular-widgets/src/lib/api/userinfo.ts","../../../projects/isy-angular-widgets/src/lib/api/public-api.ts","../../../projects/isy-angular-widgets/src/lib/i18n/widgets-config.service.ts","../../../projects/isy-angular-widgets/src/lib/skip-links/skip-links.component.ts","../../../projects/isy-angular-widgets/src/lib/skip-links/skip-links.component.html","../../../projects/isy-angular-widgets/src/lib/hauptfenster/hauptfenster.component.ts","../../../projects/isy-angular-widgets/src/lib/hauptfenster/hauptfenster.component.html","../../../projects/isy-angular-widgets/src/lib/security/security-service.ts","../../../projects/isy-angular-widgets/src/lib/security/security-guard.ts","../../../projects/isy-angular-widgets/src/lib/security/security-directive.ts","../../../projects/isy-angular-widgets/src/lib/security/public-api.ts","../../../projects/isy-angular-widgets/src/lib/incomplete-date/data/regex.ts","../../../projects/isy-angular-widgets/src/lib/incomplete-date/incomplete-date.service.ts","../../../projects/isy-angular-widgets/src/lib/validation/data/date-formats.ts","../../../projects/isy-angular-widgets/src/lib/validation/data/din-91379-characters.ts","../../../projects/isy-angular-widgets/src/lib/validation/validation.ts","../../../projects/isy-angular-widgets/src/lib/incomplete-date/incomplete-date.component.ts","../../../projects/isy-angular-widgets/src/lib/incomplete-date/incomplete-date.component.html","../../../projects/isy-angular-widgets/src/lib/wizard/directives/wizard.directive.ts","../../../projects/isy-angular-widgets/src/lib/wizard/components/wizard/wizard.component.ts","../../../projects/isy-angular-widgets/src/lib/wizard/components/wizard/wizard.component.html","../../../projects/isy-angular-widgets/src/lib/input-char/model/datentyp.ts","../../../projects/isy-angular-widgets/src/lib/input-char/model/model.ts","../../../projects/isy-angular-widgets/src/lib/input-char/services/character.service.ts","../../../projects/isy-angular-widgets/src/lib/input-char/components/multi-select-button/multi-select-button.component.ts","../../../projects/isy-angular-widgets/src/lib/input-char/components/multi-select-button/multi-select-button.component.html","../../../projects/isy-angular-widgets/src/lib/input-char/components/input-char-preview/input-char-preview.component.ts","../../../projects/isy-angular-widgets/src/lib/input-char/components/input-char-preview/input-char-preview.component.html","../../../projects/isy-angular-widgets/src/lib/input-char/components/input-char-dialog/input-char-dialog.component.ts","../../../projects/isy-angular-widgets/src/lib/input-char/components/input-char-dialog/input-char-dialog.component.html","../../../projects/isy-angular-widgets/src/lib/input-char/components/input-char/input-char.component.ts","../../../projects/isy-angular-widgets/src/lib/input-char/components/input-char/input-char.component.html","../../../projects/isy-angular-widgets/src/lib/input-char/directives/input-char.directive.ts","../../../projects/isy-angular-widgets/src/lib/http/correlation-id-http-interceptor.ts","../../../projects/isy-angular-widgets/src/lib/http/open-tracing-http-interceptor.ts","../../../projects/isy-angular-widgets/src/lib/http/open-tracing-headers.ts","../../../projects/isy-angular-widgets/src/lib/http/zipkin-open-tracing-http-interceptor.ts","../../../projects/isy-angular-widgets/src/lib/seitentoolbar/seitentoolbar.component.ts","../../../projects/isy-angular-widgets/src/lib/seitentoolbar/seitentoolbar.component.html","../../../projects/isy-angular-widgets/src/lib/pipes/form-control.pipe.ts","../../../projects/isy-angular-widgets/src/lib/pipes/data/regex.ts","../../../projects/isy-angular-widgets/src/lib/pipes/data/errors.ts","../../../projects/isy-angular-widgets/src/lib/pipes/incomplete-date.pipe.ts","../../../projects/isy-angular-widgets/src/lib/form-wrapper/form-wrapper.component.ts","../../../projects/isy-angular-widgets/src/lib/form-wrapper/form-wrapper.component.html","../../../projects/isy-angular-widgets/src/lib/core/providers.ts","../../../projects/isy-angular-widgets/src/public-api.ts","../../../projects/isy-angular-widgets/src/isyfact-isy-angular-widgets.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\n\n/**\n * Contains information about a user, mostly used for the currently logged-in user.\n */\nexport interface UserInfo {\n  /**\n   * The technical user ID.\n   */\n  userId?: string;\n\n  /**\n   * The roles associated with the user.\n   */\n  roles?: string[];\n\n  /**\n   * The name of the user to be shown in GUI.\n   */\n  displayName?: string;\n}\n\n/**\n * An abstract service to provide a concrete implementation for {@link UserInfo} gathering.\n */\n@Injectable()\nexport abstract class UserInfoService {\n  /**\n   * Returns the user info object.\n   * Necessary server calls should be implemented here.\n   */\n  abstract getUserInfo(): UserInfo;\n}\n","/*\n * Public API Surface of isy-angular-widgets\n */\n\nexport * from './userinfo';\n","import {Injectable} from '@angular/core';\nimport {WidgetsTranslation} from './widgets-translation';\nimport {Subject} from 'rxjs';\n\n/**\n * A service to translate labels in widgets library.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class WidgetsConfigService {\n  private translation: WidgetsTranslation = {\n    wizard: {\n      back: 'Zurück',\n      next: 'weiter',\n      save: 'Speichern',\n      close: 'Schließen'\n    },\n    inputChar: {\n      headerBaseChars: 'Basis',\n      headerGroups: 'Gruppen',\n      insert: 'Einfügen'\n    },\n    hauptfenster: {\n      altLogoAwl: 'Logo der Anwendungslandschaft',\n      altLogoAnbieterAwl: 'Logo des Anbieters der Anwendungslandschaft',\n      logout: 'Abmelden'\n    }\n  };\n\n  private readonly translationSource = new Subject<unknown>();\n\n  getTranslation(path: string): string | undefined {\n    // Needs to be refactored in the future\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n    return path.split('.').reduce((o, k) => (o ? (o as any)[k] : undefined), this.translation) as string;\n  }\n\n  setTranslation(value: WidgetsTranslation): void {\n    this.translation = {...this.translation, ...value};\n    this.translationSource.next(this.translation);\n  }\n}\n","import {Component, inject, Input} from '@angular/core';\nimport {SkipTarget} from './model/model';\nimport {WidgetsConfigService} from '../i18n/widgets-config.service';\n\n/**\n * Component that provides a set of skip links for accessibility purposes.\n * Allows users to quickly navigate to specific sections of the page.\n * @example\n * ```html\n * <isy-skip-links\n  ariaLabel=\"{{ 'isyAngularWidgetsDemo.skipLinks.ariaLabel' | translate }}\"\n  [links]=\"skipLinks\"\n></isy-skip-links>\n * ```\n */\n@Component({\n  selector: 'isy-skip-links',\n  templateUrl: './skip-links.component.html',\n  styleUrls: ['./skip-links.component.scss']\n})\nexport class SkipLinksComponent {\n  @Input() links: SkipTarget[] = [];\n  @Input() ariaLabel?: string;\n\n  /**\n   * A service used to translate labels within the widgets library.\n   */\n  configService = inject(WidgetsConfigService);\n\n  focusTarget(event: Event, target: string): void {\n    event.preventDefault();\n    const el = document.querySelector(target) as HTMLElement;\n\n    if (el) {\n      el.scrollIntoView({behavior: 'smooth', block: 'start'});\n\n      if (!el.hasAttribute('tabindex')) {\n        el.setAttribute('tabindex', '-1');\n      }\n\n      el.focus();\n    } else {\n      console.warn(\n        `[SkipLinksComponent]: Target '${target}' not found. Please check if the element with '${target}' exists in the DOM.`\n      );\n    }\n  }\n}\n","<nav class=\"skip-links\" [attr.aria-label]=\"configService.getTranslation('hauptfenster.aria.skipLinksAriaLabel')\">\n  @for (link of links; track link.target) {\n    <a [href]=\"link.target\" (click)=\"focusTarget($event, link.target)\" class=\"skip-link\">\n      {{ link.label }}\n    </a>\n  }\n</nav>\n","import {Component, EventEmitter, inject, Input, Output} from '@angular/core';\nimport {MegaMenuItem} from 'primeng/api';\nimport {UserInfo} from '../api/userinfo';\nimport {WidgetsConfigService} from '../i18n/widgets-config.service';\nimport {ButtonModule} from 'primeng/button';\nimport {MegaMenuModule} from 'primeng/megamenu';\nimport {SkipTarget} from './model/model';\nimport {SkipLinksComponent} from '../skip-links/skip-links.component';\n\n/**\n * The Anwendungsrahmen that contains general, application independent elements as logos or navigation bars.\n * The following template references can be used to insert custom HTML:\n * LogoAnbieterAwl - Access to the top left region. Only works if logoAnbieterAwl is not set.\n * LogoAwl - Access to top right region. Only works if logoAwl is not set.\n * Hauptnavigation-Tools - Access to the Menu bar behind the menu items, e.g. for a language picker.\n * Titelzeile - Access to the Titelzeile between Menu and Content. Only works if title is not set.\n * Seitentoolbar - Access to a space right under the Titelzeile, e.g. for some navigation buttons.\n * Linksnavigation - The left sidebar.\n * Informationsbereich - The right sidebar.\n *\n * Content without template references is used as main content.\n */\n@Component({\n  standalone: true,\n  selector: 'isy-hauptfenster',\n  templateUrl: './hauptfenster.component.html',\n  styleUrls: ['./hauptfenster.component.scss'],\n  imports: [ButtonModule, MegaMenuModule, SkipLinksComponent]\n})\nexport class HauptfensterComponent {\n  /**\n   * Items to be shown in the main menu bar.\n   */\n  @Input() items: MegaMenuItem[] = [];\n\n  /**\n   * Contains information about the user as the name to be displayed.\n   */\n  @Input() userInfo?: UserInfo;\n\n  /**\n   * A URI to the logo image file of the Anbieter der Anwendungslandschaft, e.g. Bundesregierung.\n   * Will be displayed in the upper left corner.\n   * For custom HTML, use the \"LogoAnbieterAwl\" template reference instead.\n   */\n  @Input() logoAnbieterAwl: string = '';\n\n  /**\n   * A URI to the logo image file of the Anwendungslandschaft.\n   * Will be displayed in the upper right corner.\n   * For custom HTML, use the \"LogoAwl\" template reference instead.\n   */\n  @Input() logoAwl: string = '';\n\n  /**\n   * The page title to be displayed in the Titelzeile under the menu bar.\n   * For custom HTML, use the \"Titelzeile\" template reference instead.\n   */\n  @Input() title?: string;\n\n  /**\n   * Boolean to determine if the logout button should be outlined or not.\n   */\n  @Input() outlinedLogoutButton: boolean = true;\n\n  /**\n   * The left navigation title to be displayed in the left sidebar.\n   */\n  @Input() linksNavigationTitle?: string;\n\n  /**\n   * Determines whether to show or hide the Linksnavigation, a navigation bar on the left screen side.\n   */\n  @Input() showLinksnavigation: boolean = false;\n\n  /**\n   * Determines whether to show or hide the Informationsbereich, a navigation bar on the right screen side.\n   */\n  @Input() showInformationsbereich: boolean = false;\n\n  /**\n   * Determines whether the user can collapse the Linksnavigation and Informationsbereich.\n   */\n  @Input() allowSidebarCollapse: boolean = true;\n\n  /**\n   * Determines whether the Linksnavigation is currently collapsed.\n   */\n  @Input() collapsedLinksnavigation: boolean = false;\n\n  /**\n   * Determines whether the Informationsbereich is currently collapsed.\n   */\n  @Input() collapsedInformationsbereich: boolean = false;\n\n  /**\n   * Returns the current {@link UserInfo} when the user wants to log out.\n   */\n  @Input() applicationGroupColor: string = '#A13D6D';\n\n  /**\n   * Determines the width of the Linksnavigation, e.g. \"15em\". Suggested unit is em.\n   * Default is 15em.\n   */\n  @Input() linksNavigationWidth = '15em';\n\n  /**\n   * Determines the width of the Informationsbereich, e.g. \"15em\". Suggested unit is em.\n   * Default is 15em.\n   */\n  @Input() informationsbereichWidth = '15em';\n\n  @Input() links: SkipTarget[] = [];\n\n  @Output() logoutEvent = new EventEmitter<UserInfo>();\n\n  /**\n   * A service used to translate labels within the widgets library.\n   */\n  configService = inject(WidgetsConfigService);\n}\n","<div class=\"isy-hauptfenster\">\n  <isy-skip-links [links]=\"links\"></isy-skip-links>\n  <header class=\"grid grid-nogutter\">\n    <div class=\"col isy-hauptfenster-anbieterlogo-bereich dont-print\">\n      @if (logoAnbieterAwl) {\n        <a href=\"\">\n          <img\n            alt=\"{{ configService.getTranslation('hauptfenster.altLogoAnbieterAwl') }}\"\n            class=\"isy-hauptfenster-logo-anbieter-awl\"\n            [src]=\"logoAnbieterAwl\"\n          />\n        </a>\n      } @else {\n        <ng-content select=\"[LogoAnbieterAwl]\"></ng-content>\n      }\n    </div>\n    <div class=\"col isy-hauptfenster-nutzerbereich dont-print\">\n      <div class=\"flex flex-row-reverse\">\n        @if (logoAwl) {\n          <img\n            alt=\"{{ configService.getTranslation('hauptfenster.altLogoAwl') }}\"\n            class=\"isy-hauptfenster-logo-awl\"\n            [src]=\"logoAwl\"\n          />\n        } @else {\n          <ng-content select=\"[LogoAwl]\"></ng-content>\n        }\n      </div>\n      <div class=\"flex flex-row-reverse\">\n        <p-button\n          id=\"isy-hauptfenster-logout-button\"\n          (onClick)=\"logoutEvent.emit(userInfo)\"\n          [outlined]=\"outlinedLogoutButton\"\n        >\n          {{ configService.getTranslation('hauptfenster.logout') }}\n        </p-button>\n        @if (userInfo) {\n          <div class=\"flex align-items-center justify-content-center mr-2\">\n            <em class=\"pi pi-user mr-1\"></em>\n            {{ userInfo.displayName }}\n          </div>\n        }\n      </div>\n    </div>\n  </header>\n\n  <nav>\n    <p-megaMenu [model]=\"items\" class=\"dont-print\" styleClass=\"flex\">\n      <ng-template pTemplate=\"end\">\n        <ng-content select=\"[Hauptnavigation-Tools]\"></ng-content>\n      </ng-template>\n    </p-megaMenu>\n  </nav>\n  <div class=\"isy-hauptfenster-titelzeile p-2\" [style]=\"'background-color:' + applicationGroupColor + ';'\">\n    @if (title) {\n      <div>{{ title }}</div>\n    } @else {\n      <ng-content select=\"[Titelzeile]\"></ng-content>\n    }\n  </div>\n\n  <ng-content select=\"[Seitentoolbar]\" class=\"dont-print\"></ng-content>\n\n  <div class=\"grid grid-nogutter flex-grow-1\">\n    @if (showLinksnavigation) {\n      <aside\n        [attr.aria-label]=\"configService.getTranslation('hauptfenster.aria.leftNavigation')\"\n        class=\"isy-hauptfenster-linksnavigation dont-print\"\n        [style.width]=\"collapsedLinksnavigation ? null : linksNavigationWidth\"\n      >\n        <div [hidden]=\"collapsedLinksnavigation\" id=\"open-links-navigation\">\n          @if (allowSidebarCollapse) {\n            <div class=\"align-items-center grid grid-nogutter\">\n              <div class=\"pl-3 col-9\">\n                <span class=\"font-bold\">{{ linksNavigationTitle }}</span>\n              </div>\n              <div class=\"flex justify-content-end col-3\">\n                <p-button\n                  styleClass=\"p-button-text\"\n                  icon=\"pi pi-chevron-left\"\n                  [attr.aria-label]=\"configService.getTranslation('hauptfenster.aria.collapseLinksnavigation')\"\n                  (onClick)=\"collapsedLinksnavigation = true\"\n                />\n              </div>\n            </div>\n          }\n          <ng-content select=\"[Linksnavigation]\"></ng-content>\n        </div>\n        <div [hidden]=\"!collapsedLinksnavigation\">\n          <p-button\n            styleClass=\"p-button-text\"\n            icon=\"pi pi-chevron-right\"\n            [attr.aria-label]=\"configService.getTranslation('hauptfenster.aria.expandLinksnavigation')\"\n            (onClick)=\"collapsedLinksnavigation = false\"\n          />\n        </div>\n      </aside>\n    }\n\n    <main class=\"col overflow-auto\">\n      <ng-content></ng-content>\n    </main>\n\n    @if (showInformationsbereich) {\n      <aside\n        [attr.aria-label]=\"configService.getTranslation('hauptfenster.aria.informationArea')\"\n        class=\"isy-hauptfenster-informationsbereich dont-print\"\n        [style.width]=\"collapsedInformationsbereich ? null : informationsbereichWidth\"\n      >\n        <div [hidden]=\"collapsedInformationsbereich\" id=\"open-informationsbereich\">\n          @if (allowSidebarCollapse) {\n            <div class=\"flex justify-content-start\">\n              <p-button\n                styleClass=\"p-button-text\"\n                icon=\"pi pi-chevron-right\"\n                [attr.aria-label]=\"configService.getTranslation('hauptfenster.aria.collapseInformationsbereich')\"\n                (onClick)=\"collapsedInformationsbereich = true\"\n              />\n            </div>\n          }\n          <ng-content select=\"[Informationsbereich]\"></ng-content>\n        </div>\n        <div [hidden]=\"!collapsedInformationsbereich\">\n          <p-button\n            styleClass=\"p-button-text\"\n            icon=\"pi pi-chevron-left\"\n            [attr.aria-label]=\"configService.getTranslation('hauptfenster.aria.expandInformationsbereich')\"\n            (onClick)=\"collapsedInformationsbereich = false\"\n          />\n        </div>\n      </aside>\n    }\n  </div>\n</div>\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, Route} from '@angular/router';\nimport {UserInfo} from '../api/userinfo';\nimport {Observable, of} from 'rxjs';\nimport {PermissionMaps} from './permission-maps';\n\n/**\n * A service that can be configured with permission configuration and return permissions for certain elements.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class SecurityService {\n  private roles?: string[];\n  private routeMap = new Map<string, string[]>();\n  private elementMap = new Map<string, string[]>();\n\n  /**\n   * Sets the user the service will use\n   * @param userInfo The user to use\n   */\n  setRoles(userInfo: UserInfo): void {\n    this.roles = userInfo.roles;\n  }\n\n  /**\n   * Sets the permission map the service will use\n   * @param permissionJson The permission map to use\n   */\n  setPermissions(permissionJson: PermissionMaps): void {\n    this.routeMap = new Map(Object.entries(permissionJson.routes));\n    this.elementMap = new Map(Object.entries(permissionJson.elements));\n  }\n\n  /**\n   * Checks permission for a given element\n   * @param element The element to check permission for\n   * @returns A boolean that contains whether permission for the given element is present\n   */\n  checkElementPermission(element: string): boolean {\n    if (!this.roles) return false;\n\n    const elementValue = this.elementMap.get(element);\n\n    return elementValue?.some((role) => this.roles!.includes(role)) ?? false;\n  }\n\n  /**\n   * Checks permission for a given route\n   * @param route The route to check permission for\n   * @returns An observable that eventually outputs a boolean whether the given route can be accessed\n   */\n  checkRoutePermission(route: ActivatedRouteSnapshot): Observable<boolean> {\n    if (!this.roles) return of(false);\n\n    const spacer = route.url[0].path;\n    const routeValue = this.routeMap.get(spacer);\n    const hasAccess = routeValue?.some((role) => this.roles!.includes(role)) ?? false;\n\n    return of(hasAccess);\n  }\n\n  /**\n   * Checks loading permission for a given route, e.g. for lazy loading.\n   * @param route The route to check permission for\n   * @returns An observable that eventually outputs a boolean whether the given route can be loaded\n   */\n  checkLoadRoutePermission(route: Route): Observable<boolean> {\n    if (!this.roles || !route.path) {\n      return of(false);\n    }\n\n    const routeValue = this.routeMap.get(route.path);\n    let hasPermission = false;\n\n    if (routeValue) {\n      hasPermission = routeValue.some((role) => this.roles!.includes(role));\n    }\n\n    return of(hasPermission);\n  }\n}\n","import {inject, Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot} from '@angular/router';\nimport {Observable} from 'rxjs';\nimport {SecurityService} from './security-service';\n\n/**\n * An AuthGuard that can check whether certain routes can be loaded or activated with current permissions.\n * Can e.g. be used in app-routing-module:\n *\n *\n *   {\n *     path: 'personen',\n *     canLoad: [AuthGuard]\n *   }\n */\n@Injectable({providedIn: 'root'})\nexport class AuthGuard {\n  /**\n   * A service that can be configured with permission configuration and return permissions for certain elements.\n   */\n  private readonly securityService = inject(SecurityService);\n\n  /**\n   * Determines if a given route can be accessed\n   * @param route The route to check\n   * @returns An observable that eventually outputs a boolean whether the given route can be accessed\n   */\n  canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\n    return this.securityService.checkRoutePermission(route);\n  }\n}\n","import {Directive, inject, Input, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {SecurityService} from './security-service';\n\n/**\n * A structural directive similar to *ngIf (now @if block). Adds or removes HTML elements based on a permission check.\n * It takes the ID of a permission which is required to use the HTML-element.\n *\n * Usage: <div *isyPermitted=\"'permissionId'\"></div>\n */\n@Directive({\n  selector: '[isyPermitted]'\n})\nexport class SecurityDirective {\n  /**\n   * Represents an embedded template that can be used to instantiate embedded views.\n   */\n  private readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n\n  /**\n   * Represents a container where one or more views can be attached to a component.\n   */\n  private readonly viewContainer = inject(ViewContainerRef);\n\n  /**\n   * A service that can be configured with permission configuration and return permissions for certain elements.\n   */\n  private readonly securityService = inject(SecurityService);\n\n  /**\n   * Shows the element if the corresponding permission is present\n   * @param id The id of the corresponding permission\n   */\n  @Input() set isyPermitted(id: string) {\n    if (id === undefined || id === null) {\n      this.createOrClearView(true);\n    } else {\n      const decision = this.securityService.checkElementPermission(id);\n      this.createOrClearView(decision);\n    }\n  }\n\n  /**\n   * Creates the embedded view or removes it.\n   * @param shouldRender Whether the view should be rendered or not.\n   */\n  private createOrClearView(shouldRender: boolean): void {\n    if (shouldRender) {\n      this.viewContainer.createEmbeddedView(this.template);\n    } else {\n      this.viewContainer.clear();\n    }\n  }\n}\n","/*\n * Public API Surface of isy-angular-widgets\n */\n\nexport * from './security-guard';\nexport * from './security-service';\nexport * from './permission-maps';\nexport * from './security-directive';\n","export const INCOMPLETE_DATE_REGEX: RegExp = /^(0{2}\\.x{2}\\.\\d{4})$|^(x{2}\\.0{2}\\.\\d{4})$/;\n\nexport const UNSPECIFIED_DATE_REGEX: RegExp = /^(0{2}\\.\\d{2}\\.\\d{4})$|^(\\d{2}\\.0{2}\\.\\d{4})$/;\n","import {Injectable} from '@angular/core';\nimport {DateObject} from './model/model';\nimport {INCOMPLETE_DATE_REGEX, UNSPECIFIED_DATE_REGEX} from './data/regex';\n\n/**\n * Performs transformations from incomplete dates into german date format DD.MM.YYYY\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class IncompleteDateService {\n  private readonly DATE_CHAR = 'x';\n  private readonly DATE_ZERO = '0000';\n  private readonly DATE_ZERO_FORMAT = '00.00.0000';\n\n  /**\n   * If the new date is a valid or incomplete date it should be transformed\n   * into the german date format. Otherwise, return it empty.\n   * @param newValue Value to be transformed\n   * @param dateInPastConstraint If true, the date should be in the past\n   * @param allowZeroFormat If true, the zero date format e.g. \"00.00.0000\" for unknown dates should be allowed\n   * @returns The transformed date in the german date format\n   */\n  transformValue(newValue: string, dateInPastConstraint = false, allowZeroFormat = false): string {\n    let dateStr = newValue;\n    const [day, month, year] = dateStr.split('.');\n\n    if (allowZeroFormat && year === this.DATE_ZERO) return this.DATE_ZERO_FORMAT;\n\n    const adjustedYear = this.adjustYear(year, dateInPastConstraint);\n    dateStr = [day, month, adjustedYear].join('.');\n\n    if (this.dateIsUnspecified(dateStr)) dateStr = this.getIncompleteDate(dateStr, allowZeroFormat);\n\n    return dateStr;\n  }\n\n  /**\n   * Adjusts a year to be in the past if needed\n   * E.g. the year \"99\" in a dateInPast setting is 1999 instead of 2099\n   * @param year Year as a string\n   * @param dateInPastConstraint If true, the date should be in the past\n   * @returns Adjusted year as a string\n   */\n  private adjustYear(year: string, dateInPastConstraint: boolean): string {\n    const maxPartYearLength = 4;\n    const coEfficient = 10;\n    let partYear = year;\n    const partYearNoUnderscore = `${year}`.replace(/_/g, '');\n\n    if (partYearNoUnderscore.length < maxPartYearLength && !partYearNoUnderscore.includes(this.DATE_CHAR)) {\n      if (partYearNoUnderscore.length !== 0) {\n        const currentYear: number = new Date().getFullYear();\n        const numX = coEfficient ** partYearNoUnderscore.length;\n        partYear = currentYear.toString().slice(0, -partYearNoUnderscore.length).concat(partYearNoUnderscore);\n        partYear =\n          Number(partYear) > currentYear && dateInPastConstraint\n            ? (Number(partYear) - numX).toString()\n            : Number(partYear).toString();\n      }\n    }\n\n    return partYear;\n  }\n\n  /**\n   * Takes an incomplete date and transforms it into the german date format.\n   * Example: x1.x1.1999 -> xx.xx.1999\n   * @param date Date as a string\n   * @param allowZeroFormat If true, the zero date format e.g. \"00.00.0000\" for unknown dates should be allowed\n   * @returns The transformed date in the german date format\n   */\n  private getIncompleteDate(date: string, allowZeroFormat = false): string {\n    const formats = date.split('.');\n    const dateKeys = ['day', 'month', 'year'];\n\n    const dateObject = dateKeys.reduce<DateObject>(\n      (object: DateObject, element: string, index: number) => {\n        let partOfFormat = formats[index];\n\n        if (partOfFormat.includes(this.DATE_CHAR)) {\n          partOfFormat = this.DATE_CHAR.repeat(partOfFormat.length);\n        }\n\n        return {...object, [element]: partOfFormat};\n      },\n      {day: '', month: '', year: ''}\n    );\n\n    const dateStr = Object.values(dateObject).join('.');\n\n    if (\n      RegExp(INCOMPLETE_DATE_REGEX).exec(dateStr) !== null ||\n      dateObject.month.includes(this.DATE_CHAR) ||\n      dateObject.year.includes(this.DATE_CHAR)\n    )\n      return 'xx.xx.' + dateObject.year;\n\n    if (allowZeroFormat && dateObject.year === this.DATE_ZERO) return this.DATE_ZERO_FORMAT;\n\n    if (dateObject.month === '00') return '00.00.' + dateObject.year;\n\n    return dateStr;\n  }\n\n  /**\n   * Check if the date in date format DD.MM.YYYY is unspecified or not\n   * @param dateStr Date as a string\n   * @returns True or false as a boolean\n   */\n  private dateIsUnspecified(dateStr: string): boolean {\n    return !(RegExp(UNSPECIFIED_DATE_REGEX).exec(dateStr) === null && RegExp(this.DATE_CHAR).exec(dateStr) === null);\n  }\n}\n","export const INPUT_MASK_REGEX: RegExp = /^([x0-9]{2}\\.[x0-9]{2}\\.[x0-9]{4})$/;\n\nexport const INPUT_MASK_REGEX_ISO_DATE: RegExp = /^([x0-9]{4}-[x0-9]{2}-[x0-9]{2})$/;\n\n// Multiple regex combined to one (SonarQube error)\nexport const INPUT_UNSPECIFIED_REGEX = new RegExp(\n  /* 00.12.1234 */\n  /^(0{2}\\.(0[1-9]|1[0-2])\\.\\d{4})/.source +\n    '$|' +\n    /* 00.00.1234 */\n    /^(0{2}\\.0{2}\\.\\d{4})/.source +\n    '$|' +\n    /* 00.00.0000 */\n    /^(0{2}\\.0{2}\\.0{4})/.source +\n    '$|' +\n    /* xx.12.1234 */\n    /^(x{2}\\.(0[1-9]|1[0-2])\\.\\d{4})/.source +\n    '$|' +\n    /* xx.xx.1234 */\n    /^(x{2}\\.x{2}\\.\\d{4})/.source +\n    '$|' +\n    /* xx.xx.xxxx */\n    /^(x{2}\\.x{2}\\.x{4})$/.source\n);\nexport const INPUT_UNSPECIFIED_REGEX_ISO_DATE = new RegExp(\n  /* 1234-12-00 */\n  /^(\\d{4}-(0[1-9]|1[0-2])-0{2})/.source +\n    '$|' +\n    /* 1234-00-00 */\n    /^(\\d{4}-0{2}-0{2})/.source +\n    '$|' +\n    /* 0000-00-00 */\n    /^(0{4}-0{2}-0{2})/.source +\n    '$|' +\n    /* 1234-12-xx */\n    /^(\\d{4}-(0[1-9]|1[0-2])-x{2})/.source +\n    '$|' +\n    /* 1234-xx-xx */\n    /^(\\d{4}-x{2}-x{2})/.source +\n    '$|' +\n    /* xxxx-xx-xx */\n    /^(x{4}-x{2}-x{2})$/.source\n);\n","import {Din91379Characters} from '../model/din-91379';\n\n/**\n * Provides the allowed characters of DIN 91379 in hexadecimal notation (05.10.2023).\n * The characters are categorized into different groups:\n * - `latin`: Allowed Latin characters with diacritics.\n * - `n1`: Allowed characters for N1 category.\n * - `n2`: Allowed characters for N2 category.\n * - `n3`: Allowed characters for N3 category.\n * - `n4`: Allowed characters for N4 category.\n * - `e1`: Allowed characters for E1 category.\n * - `eGreek`: Allowed Greek characters.\n * - `eCyrillic`: Allowed Cyrillic characters.\n */\nexport const din91379Characters: Din91379Characters = {\n  latin: {\n    diacritic: {\n      'U+0300': true,\n      'U+0301': true,\n      'U+0302': true,\n      'U+0304': true,\n      'U+0306': true,\n      'U+0307': true,\n      'U+0308': true,\n      'U+030B': true,\n      'U+030C': true,\n      'U+0310': true,\n      'U+0315': true,\n      'U+031B': true,\n      'U+0323': true,\n      'U+0325': true,\n      'U+0326': true,\n      'U+0327': true,\n      'U+0328': true,\n      'U+0331': true,\n      'U+035F': true,\n      'U+030D': true\n    },\n    allowed: {\n      'U+0041': true,\n      'U+0041+030B': true,\n      'U+0042': true,\n      'U+0043': true,\n      'U+0043+0300': true,\n      'U+0043+0304': true,\n      'U+0043+0306': true,\n      'U+0043+0308': true,\n      'U+0043+0315': true,\n      'U+0043+0323': true,\n      'U+0043+0326': true,\n      'U+0043+0328+0306': true,\n      'U+0044': true,\n      'U+0044+0302': true,\n      'U+0045': true,\n      'U+0046': true,\n      'U+0046+0300': true,\n      'U+0046+0304': true,\n      'U+0047': true,\n      'U+0047+0300': true,\n      'U+0048': true,\n      'U+0048+0304': true,\n      'U+0048+0326': true,\n      'U+0048+0331': true,\n      'U+0049': true,\n      'U+004A': true,\n      'U+004A+0301': true,\n      'U+004A+030C': true,\n      'U+004B': true,\n      'U+004B+0300': true,\n      'U+004B+0302': true,\n      'U+004B+0304': true,\n      'U+004B+0307': true,\n      'U+004B+0315': true,\n      'U+004B+031B': true,\n      'U+004B+0326': true,\n      'U+004B+035F+0048': true,\n      'U+004B+035F+0068': true,\n      'U+004C': true,\n      'U+004C+0302': true,\n      'U+004C+0325': true,\n      'U+004C+0325+0304': true,\n      'U+004C+0326': true,\n      'U+004D': true,\n      'U+004D+0300': true,\n      'U+004D+0302': true,\n      'U+004D+0306': true,\n      'U+004D+0310': true,\n      'U+004E': true,\n      'U+004E+0302': true,\n      'U+004E+0304': true,\n      'U+004E+0306': true,\n      'U+004E+0326': true,\n      'U+004F': true,\n      'U+0050': true,\n      'U+0050+0300': true,\n      'U+0050+0304': true,\n      'U+0050+0315': true,\n      'U+0050+0323': true,\n      'U+0051': true,\n      'U+0052': true,\n      'U+0052+0306': true,\n      'U+0052+0325': true,\n      'U+0052+0325+0304': true,\n      'U+0053': true,\n      'U+0053+0300': true,\n      'U+0053+0304': true,\n      'U+0053+031B+0304': true,\n      'U+0053+0331': true,\n      'U+0054': true,\n      'U+0054+0300': true,\n      'U+0054+0304': true,\n      'U+0054+0308': true,\n      'U+0054+0315': true,\n      'U+0054+031B': true,\n      'U+0055': true,\n      'U+0055+0307': true,\n      'U+0056': true,\n      'U+0057': true,\n      'U+0058': true,\n      'U+0059': true,\n      'U+005A': true,\n      'U+005A+0300': true,\n      'U+005A+0304': true,\n      'U+005A+0306': true,\n      'U+005A+0308': true,\n      'U+005A+0327': true,\n      'U+0061': true,\n      'U+0061+030B': true,\n      'U+0062': true,\n      'U+0063': true,\n      'U+0063+0300': true,\n      'U+0063+0304': true,\n      'U+0063+0306': true,\n      'U+0063+0308': true,\n      'U+0063+0315': true,\n      'U+0063+0323': true,\n      'U+0063+0326': true,\n      'U+0063+0328+0306': true,\n      'U+0064': true,\n      'U+0064+0302': true,\n      'U+0065': true,\n      'U+0066': true,\n      'U+0066+0300': true,\n      'U+0066+0304': true,\n      'U+0067': true,\n      'U+0067+0300': true,\n      'U+0068': true,\n      'U+0068+0304': true,\n      'U+0068+0326': true,\n      'U+0069': true,\n      'U+006A': true,\n      'U+006A+0301': true,\n      'U+006B': true,\n      'U+006B+0300': true,\n      'U+006B+0302': true,\n      'U+006B+0304': true,\n      'U+006B+0307': true,\n      'U+006B+0315': true,\n      'U+006B+031B': true,\n      'U+006B+0326': true,\n      'U+006B+035F+0068': true,\n      'U+006C': true,\n      'U+006C+0302': true,\n      'U+006C+0325': true,\n      'U+006C+0325+0304': true,\n      'U+006C+0326': true,\n      'U+006D': true,\n      'U+006D+0300': true,\n      'U+006D+0302': true,\n      'U+006D+0306': true,\n      'U+006D+0310': true,\n      'U+006E': true,\n      'U+006E+0302': true,\n      'U+006E+0304': true,\n      'U+006E+0306': true,\n      'U+006E+0326': true,\n      'U+006F': true,\n      'U+0070': true,\n      'U+0070+0300': true,\n      'U+0070+0304': true,\n      'U+0070+0315': true,\n      'U+0070+0323': true,\n      'U+0071': true,\n      'U+0072': true,\n      'U+0072+0306': true,\n      'U+0072+0325': true,\n      'U+0072+0325+0304': true,\n      'U+0073': true,\n      'U+0073+0300': true,\n      'U+0073+0304': true,\n      'U+0073+031B+0304': true,\n      'U+0073+0331': true,\n      'U+0074': true,\n      'U+0074+0300': true,\n      'U+0074+0304': true,\n      'U+0074+0315': true,\n      'U+0074+031B': true,\n      'U+0075': true,\n      'U+0075+0307': true,\n      'U+0076': true,\n      'U+0077': true,\n      'U+0078': true,\n      'U+0079': true,\n      'U+007A': true,\n      'U+007A+0300': true,\n      'U+007A+0304': true,\n      'U+007A+0306': true,\n      'U+007A+0308': true,\n      'U+007A+0327': true,\n      'U+00C0': true,\n      'U+00C1': true,\n      'U+00C2': true,\n      'U+00C3': true,\n      'U+00C4': true,\n      'U+00C5': true,\n      'U+00C6': true,\n      'U+00C7': true,\n      'U+00C7+0306': true,\n      'U+00C8': true,\n      'U+00C9': true,\n      'U+00CA': true,\n      'U+00CB': true,\n      'U+00CC': true,\n      'U+00CD': true,\n      'U+00CE': true,\n      'U+00CF': true,\n      'U+00D0': true,\n      'U+00D1': true,\n      'U+00D2': true,\n      'U+00D3': true,\n      'U+00D4': true,\n      'U+00D5': true,\n      'U+00D6': true,\n      'U+00D8': true,\n      'U+00D9': true,\n      'U+00DA': true,\n      'U+00DB': true,\n      'U+00DB+0304': true,\n      'U+00DC': true,\n      'U+00DD': true,\n      'U+00DE': true,\n      'U+00DF': true,\n      'U+00E0': true,\n      'U+00E1': true,\n      'U+00E2': true,\n      'U+00E3': true,\n      'U+00E4': true,\n      'U+00E5': true,\n      'U+00E6': true,\n      'U+00E7': true,\n      'U+00E7+0306': true,\n      'U+00E8': true,\n      'U+00E9': true,\n      'U+00EA': true,\n      'U+00EB': true,\n      'U+00EC': true,\n      'U+00ED': true,\n      'U+00EE': true,\n      'U+00EF': true,\n      'U+00F0': true,\n      'U+00F1': true,\n      'U+00F2': true,\n      'U+00F3': true,\n      'U+00F4': true,\n      'U+00F5': true,\n      'U+00F6': true,\n      'U+00F8': true,\n      'U+00F9': true,\n      'U+00FA': true,\n      'U+00FB': true,\n      'U+00FB+0304': true,\n      'U+00FC': true,\n      'U+00FD': true,\n      'U+00FE': true,\n      'U+00FF': true,\n      'U+00FF+0301': true,\n      'U+0100': true,\n      'U+0101': true,\n      'U+0102': true,\n      'U+0103': true,\n      'U+0104': true,\n      'U+0105': true,\n      'U+0106': true,\n      'U+0107': true,\n      'U+0108': true,\n      'U+0109': true,\n      'U+010A': true,\n      'U+010B': true,\n      'U+010C': true,\n      'U+010C+0315': true,\n      'U+010C+0323': true,\n      'U+010D': true,\n      'U+010D+0315': true,\n      'U+010D+0323': true,\n      'U+010E': true,\n      'U+010F': true,\n      'U+0110': true,\n      'U+0111': true,\n      'U+0112': true,\n      'U+0113': true,\n      'U+0114': true,\n      'U+0115': true,\n      'U+0116': true,\n      'U+0117': true,\n      'U+0118': true,\n      'U+0119': true,\n      'U+011A': true,\n      'U+011B': true,\n      'U+011C': true,\n      'U+011D': true,\n      'U+011E': true,\n      'U+011F': true,\n      'U+0120': true,\n      'U+0121': true,\n      'U+0122': true,\n      'U+0123': true,\n      'U+0124': true,\n      'U+0125': true,\n      'U+0126': true,\n      'U+0127': true,\n      'U+0128': true,\n      'U+0129': true,\n      'U+012A': true,\n      'U+012A+0301': true,\n      'U+012B': true,\n      'U+012B+0301': true,\n      'U+012C': true,\n      'U+012D': true,\n      'U+012E': true,\n      'U+012F': true,\n      'U+0130': true,\n      'U+0131': true,\n      'U+0132': true,\n      'U+0133': true,\n      'U+0134': true,\n      'U+0135': true,\n      'U+0136': true,\n      'U+0137': true,\n      'U+0138': true,\n      'U+0139': true,\n      'U+013A': true,\n      'U+013B': true,\n      'U+013C': true,\n      'U+013D': true,\n      'U+013E': true,\n      'U+013F': true,\n      'U+0140': true,\n      'U+0141': true,\n      'U+0142': true,\n      'U+0143': true,\n      'U+0144': true,\n      'U+0145': true,\n      'U+0146': true,\n      'U+0147': true,\n      'U+0148': true,\n      'U+0149': true,\n      'U+014A': true,\n      'U+014B': true,\n      'U+014C': true,\n      'U+014D': true,\n      'U+014E': true,\n      'U+014F': true,\n      'U+0150': true,\n      'U+0151': true,\n      'U+0152': true,\n      'U+0153': true,\n      'U+0154': true,\n      'U+0155': true,\n      'U+0156': true,\n      'U+0157': true,\n      'U+0158': true,\n      'U+0159': true,\n      'U+015A': true,\n      'U+015B': true,\n      'U+015C': true,\n      'U+015D': true,\n      'U+015E': true,\n      'U+015F': true,\n      'U+0160': true,\n      'U+0161': true,\n      'U+0162': true,\n      'U+0163': true,\n      'U+0164': true,\n      'U+0165': true,\n      'U+0166': true,\n      'U+0167': true,\n      'U+0168': true,\n      'U+0169': true,\n      'U+016A': true,\n      'U+016B': true,\n      'U+016C': true,\n      'U+016D': true,\n      'U+016E': true,\n      'U+016F': true,\n      'U+0170': true,\n      'U+0171': true,\n      'U+0172': true,\n      'U+0173': true,\n      'U+0174': true,\n      'U+0175': true,\n      'U+0176': true,\n      'U+0177': true,\n      'U+0178': true,\n      'U+0179': true,\n      'U+017A': true,\n      'U+017B': true,\n      'U+017C': true,\n      'U+017D': true,\n      'U+017D+0326': true,\n      'U+017D+0327': true,\n      'U+017E': true,\n      'U+017E+0326': true,\n      'U+017E+0327': true,\n      'U+0187': true,\n      'U+0188': true,\n      'U+018F': true,\n      'U+0197': true,\n      'U+01A0': true,\n      'U+01A1': true,\n      'U+01AF': true,\n      'U+01B0': true,\n      'U+01B7': true,\n      'U+01CD': true,\n      'U+01CE': true,\n      'U+01CF': true,\n      'U+01D0': true,\n      'U+01D1': true,\n      'U+01D2': true,\n      'U+01D3': true,\n      'U+01D4': true,\n      'U+01D5': true,\n      'U+01D6': true,\n      'U+01D7': true,\n      'U+01D8': true,\n      'U+01D9': true,\n      'U+01DA': true,\n      'U+01DB': true,\n      'U+01DC': true,\n      'U+01DE': true,\n      'U+01DF': true,\n      'U+01E2': true,\n      'U+01E3': true,\n      'U+01E4': true,\n      'U+01E5': true,\n      'U+01E6': true,\n      'U+01E7': true,\n      'U+01E8': true,\n      'U+01E9': true,\n      'U+01EA': true,\n      'U+01EB': true,\n      'U+01EC': true,\n      'U+01ED': true,\n      'U+01EE': true,\n      'U+01EF': true,\n      'U+01F0': true,\n      'U+01F4': true,\n      'U+01F5': true,\n      'U+01F8': true,\n      'U+01F9': true,\n      'U+01FA': true,\n      'U+01FB': true,\n      'U+01FC': true,\n      'U+01FD': true,\n      'U+01FE': true,\n      'U+01FF': true,\n      'U+0212': true,\n      'U+0213': true,\n      'U+0218': true,\n      'U+0219': true,\n      'U+021A': true,\n      'U+021B': true,\n      'U+021E': true,\n      'U+021F': true,\n      'U+0227': true,\n      'U+0228': true,\n      'U+0229': true,\n      'U+022A': true,\n      'U+022B': true,\n      'U+022C': true,\n      'U+022D': true,\n      'U+022E': true,\n      'U+022F': true,\n      'U+0230': true,\n      'U+0231': true,\n      'U+0232': true,\n      'U+0233': true,\n      'U+0259': true,\n      'U+0268': true,\n      'U+0292': true,\n      'U+1E02': true,\n      'U+1E03': true,\n      'U+1E06': true,\n      'U+1E07': true,\n      'U+1E0A': true,\n      'U+1E0B': true,\n      'U+1E0C': true,\n      'U+1E0D': true,\n      'U+1E0E': true,\n      'U+1E0F': true,\n      'U+1E10': true,\n      'U+1E11': true,\n      'U+1E1C': true,\n      'U+1E1D': true,\n      'U+1E1E': true,\n      'U+1E1F': true,\n      'U+1E20': true,\n      'U+1E21': true,\n      'U+1E22': true,\n      'U+1E23': true,\n      'U+1E24': true,\n      'U+1E25': true,\n      'U+1E26': true,\n      'U+1E27': true,\n      'U+1E28': true,\n      'U+1E29': true,\n      'U+1E2A': true,\n      'U+1E2B': true,\n      'U+1E2F': true,\n      'U+1E30': true,\n      'U+1E31': true,\n      'U+1E32': true,\n      'U+1E32+0304': true,\n      'U+1E33': true,\n      'U+1E33+0304': true,\n      'U+1E34': true,\n      'U+1E35': true,\n      'U+1E36': true,\n      'U+1E37': true,\n      'U+1E3A': true,\n      'U+1E3B': true,\n      'U+1E40': true,\n      'U+1E41': true,\n      'U+1E42': true,\n      'U+1E43': true,\n      'U+1E44': true,\n      'U+1E45': true,\n      'U+1E46': true,\n      'U+1E47': true,\n      'U+1E48': true,\n      'U+1E49': true,\n      'U+1E52': true,\n      'U+1E53': true,\n      'U+1E54': true,\n      'U+1E55': true,\n      'U+1E56': true,\n      'U+1E57': true,\n      'U+1E58': true,\n      'U+1E59': true,\n      'U+1E5A': true,\n      'U+1E5B': true,\n      'U+1E5E': true,\n      'U+1E5F': true,\n      'U+1E60': true,\n      'U+1E61': true,\n      'U+1E62': true,\n      'U+1E62+0304': true,\n      'U+1E63': true,\n      'U+1E63+0304': true,\n      'U+1E6A': true,\n      'U+1E6B': true,\n      'U+1E6C': true,\n      'U+1E6C+0304': true,\n      'U+1E6D': true,\n      'U+1E6D+0304': true,\n      'U+1E6E': true,\n      'U+1E6F': true,\n      'U+1E80': true,\n      'U+1E81': true,\n      'U+1E82': true,\n      'U+1E83': true,\n      'U+1E84': true,\n      'U+1E85': true,\n      'U+1E86': true,\n      'U+1E87': true,\n      'U+1E8C': true,\n      'U+1E8D': true,\n      'U+1E8E': true,\n      'U+1E8F': true,\n      'U+1E90': true,\n      'U+1E91': true,\n      'U+1E92': true,\n      'U+1E93': true,\n      'U+1E94': true,\n      'U+1E95': true,\n      'U+1E96': true,\n      'U+1E97': true,\n      'U+1E9E': true,\n      'U+1EA0': true,\n      'U+1EA0+0308': true,\n      'U+1EA1': true,\n      'U+1EA1+0308': true,\n      'U+1EA2': true,\n      'U+1EA3': true,\n      'U+1EA4': true,\n      'U+1EA5': true,\n      'U+1EA6': true,\n      'U+1EA7': true,\n      'U+1EA8': true,\n      'U+1EA9': true,\n      'U+1EAA': true,\n      'U+1EAB': true,\n      'U+1EAC': true,\n      'U+1EAD': true,\n      'U+1EAE': true,\n      'U+1EAF': true,\n      'U+1EB0': true,\n      'U+1EB1': true,\n      'U+1EB2': true,\n      'U+1EB3': true,\n      'U+1EB4': true,\n      'U+1EB5': true,\n      'U+1EB6': true,\n      'U+1EB7': true,\n      'U+1EB8': true,\n      'U+1EB9': true,\n      'U+1EBA': true,\n      'U+1EBB': true,\n      'U+1EBC': true,\n      'U+1EBD': true,\n      'U+1EBE': true,\n      'U+1EBF': true,\n      'U+1EC0': true,\n      'U+1EC1': true,\n      'U+1EC2': true,\n      'U+1EC3': true,\n      'U+1EC4': true,\n      'U+1EC5': true,\n      'U+1EC6': true,\n      'U+1EC7': true,\n      'U+1EC8': true,\n      'U+1EC9': true,\n      'U+1ECA': true,\n      'U+1ECB': true,\n      'U+1ECC': true,\n      'U+1ECC+0308': true,\n      'U+1ECD': true,\n      'U+1ECD+0308': true,\n      'U+1ECE': true,\n      'U+1ECF': true,\n      'U+1ED0': true,\n      'U+1ED1': true,\n      'U+1ED2': true,\n      'U+1ED3': true,\n      'U+1ED4': true,\n      'U+1ED5': true,\n      'U+1ED6': true,\n      'U+1ED7': true,\n      'U+1ED8': true,\n      'U+1ED9': true,\n      'U+1EDA': true,\n      'U+1EDB': true,\n      'U+1EDC': true,\n      'U+1EDD': true,\n      'U+1EDE': true,\n      'U+1EDF': true,\n      'U+1EE0': true,\n      'U+1EE1': true,\n      'U+1EE2': true,\n      'U+1EE3': true,\n      'U+1EE4': true,\n      'U+1EE4+0304': true,\n      'U+1EE4+0308': true,\n      'U+1EE5': true,\n      'U+1EE5+0304': true,\n      'U+1EE5+0308': true,\n      'U+1EE6': true,\n      'U+1EE7': true,\n      'U+1EE8': true,\n      'U+1EE9': true,\n      'U+1EEA': true,\n      'U+1EEB': true,\n      'U+1EEC': true,\n      'U+1EED': true,\n      'U+1EEE': true,\n      'U+1EEF': true,\n      'U+1EF0': true,\n      'U+1EF1': true,\n      'U+1EF2': true,\n      'U+1EF3': true,\n      'U+1EF4': true,\n      'U+1EF5': true,\n      'U+1EF6': true,\n      'U+1EF7': true,\n      'U+1EF8': true,\n      'U+1EF9': true,\n      'U+0113+030D': true,\n      'U+014D+030D': true,\n      'U+1E17': true\n    }\n  },\n  n1: {\n    allowed: {\n      'U+0020': true,\n      'U+0027': true,\n      'U+002C': true,\n      'U+002D': true,\n      'U+002E': true,\n      'U+0060': true,\n      'U+007E': true,\n      'U+00A8': true,\n      'U+00B4': true,\n      'U+00B7': true,\n      'U+02B9': true,\n      'U+02BA': true,\n      'U+02BE': true,\n      'U+02BF': true,\n      'U+02C8': true,\n      'U+02CC': true,\n      'U+2019': true,\n      'U+2021': true\n    }\n  },\n  n2: {\n    allowed: {\n      'U+0021': true,\n      'U+0022': true,\n      'U+0023': true,\n      'U+0024': true,\n      'U+0025': true,\n      'U+0026': true,\n      'U+0028': true,\n      'U+0029': true,\n      'U+002A': true,\n      'U+002B': true,\n      'U+002F': true,\n      'U+0030': true,\n      'U+0031': true,\n      'U+0032': true,\n      'U+0033': true,\n      'U+0034': true,\n      'U+0035': true,\n      'U+0036': true,\n      'U+0037': true,\n      'U+0038': true,\n      'U+0039': true,\n      'U+003A': true,\n      'U+003B': true,\n      'U+003C': true,\n      'U+003D': true,\n      'U+003E': true,\n      'U+003F': true,\n      'U+0040': true,\n      'U+005B': true,\n      'U+005C': true,\n      'U+005D': true,\n      'U+005E': true,\n      'U+005F': true,\n      'U+007B': true,\n      'U+007C': true,\n      'U+007D': true,\n      'U+00A1': true,\n      'U+00A2': true,\n      'U+00A3': true,\n      'U+00A5': true,\n      'U+00A7': true,\n      'U+00A9': true,\n      'U+00AA': true,\n      'U+00AB': true,\n      'U+00AC': true,\n      'U+00AE': true,\n      'U+00AF': true,\n      'U+00B0': true,\n      'U+00B1': true,\n      'U+00B2': true,\n      'U+00B3': true,\n      'U+00B5': true,\n      'U+00B6': true,\n      'U+00B9': true,\n      'U+00BA': true,\n      'U+00BB': true,\n      'U+00BF': true,\n      'U+00D7': true,\n      'U+00F7': true,\n      'U+20AC': true\n    }\n  },\n  n3: {\n    allowed: {\n      'U+00A4': true,\n      'U+00A6': true,\n      'U+00B8': true,\n      'U+00BC': true,\n      'U+00BD': true,\n      'U+00BE': true,\n      'U+2032': true,\n      'U+2033': true\n    }\n  },\n  n4: {\n    allowed: {\n      'U+0009': true,\n      'U+000A': true,\n      'U+000D': true,\n      'U+00A0': true\n    }\n  },\n  e1: {\n    allowed: {\n      'U+0192': true,\n      'U+02B0': true,\n      'U+02B3': true,\n      'U+02C6': true,\n      'U+02DC': true,\n      'U+02E2': true,\n      'U+1D48': true,\n      'U+1D57': true,\n      'U+2018': true,\n      'U+201A': true,\n      'U+201C': true,\n      'U+201D': true,\n      'U+201E': true,\n      'U+2020': true,\n      'U+2026': true,\n      'U+2030': true,\n      'U+2039': true,\n      'U+203A': true,\n      'U+2070': true,\n      'U+2074': true,\n      'U+2075': true,\n      'U+2076': true,\n      'U+2077': true,\n      'U+2078': true,\n      'U+2079': true,\n      'U+207F': true,\n      'U+2080': true,\n      'U+2081': true,\n      'U+2082': true,\n      'U+2083': true,\n      'U+2084': true,\n      'U+2085': true,\n      'U+2086': true,\n      'U+2087': true,\n      'U+2088': true,\n      'U+2089': true,\n      'U+2122': true,\n      'U+221E': true,\n      'U+2264': true,\n      'U+2265': true\n    }\n  },\n  eGreek: {\n    allowed: {\n      'U+0386': true,\n      'U+0388': true,\n      'U+0389': true,\n      'U+038A': true,\n      'U+038C': true,\n      'U+038E': true,\n      'U+038F': true,\n      'U+0390': true,\n      'U+0391': true,\n      'U+0392': true,\n      'U+0393': true,\n      'U+0394': true,\n      'U+0395': true,\n      'U+0396': true,\n      'U+0397': true,\n      'U+0398': true,\n      'U+0399': true,\n      'U+039A': true,\n      'U+039B': true,\n      'U+039C': true,\n      'U+039D': true,\n      'U+039E': true,\n      'U+039F': true,\n      'U+03A0': true,\n      'U+03A1': true,\n      'U+03A3': true,\n      'U+03A4': true,\n      'U+03A5': true,\n      'U+03A6': true,\n      'U+03A7': true,\n      'U+03A8': true,\n      'U+03A9': true,\n      'U+03AA': true,\n      'U+03AB': true,\n      'U+03AC': true,\n      'U+03AD': true,\n      'U+03AE': true,\n      'U+03AF': true,\n      'U+03B0': true,\n      'U+03B1': true,\n      'U+03B2': true,\n      'U+03B3': true,\n      'U+03B4': true,\n      'U+03B5': true,\n      'U+03B6': true,\n      'U+03B7': true,\n      'U+03B8': true,\n      'U+03B9': true,\n      'U+03BA': true,\n      'U+03BB': true,\n      'U+03BC': true,\n      'U+03BD': true,\n      'U+03BE': true,\n      'U+03BF': true,\n      'U+03C0': true,\n      'U+03C1': true,\n      'U+03C2': true,\n      'U+03C3': true,\n      'U+03C4': true,\n      'U+03C5': true,\n      'U+03C6': true,\n      'U+03C7': true,\n      'U+03C8': true,\n      'U+03C9': true,\n      'U+03CA': true,\n      'U+03CB': true,\n      'U+03CC': true,\n      'U+03CD': true,\n      'U+03CE': true\n    }\n  },\n  eCyrillic: {\n    allowed: {\n      'U+040D': true,\n      'U+0410': true,\n      'U+0411': true,\n      'U+0412': true,\n      'U+0413': true,\n      'U+0414': true,\n      'U+0415': true,\n      'U+0416': true,\n      'U+0417': true,\n      'U+0418': true,\n      'U+0419': true,\n      'U+041A': true,\n      'U+041B': true,\n      'U+041C': true,\n      'U+041D': true,\n      'U+041E': true,\n      'U+041F': true,\n      'U+0420': true,\n      'U+0421': true,\n      'U+0422': true,\n      'U+0423': true,\n      'U+0424': true,\n      'U+0425': true,\n      'U+0426': true,\n      'U+0427': true,\n      'U+0428': true,\n      'U+0429': true,\n      'U+042A': true,\n      'U+042C': true,\n      'U+042E': true,\n      'U+042F': true,\n      'U+0430': true,\n      'U+0431': true,\n      'U+0432': true,\n      'U+0433': true,\n      'U+0434': true,\n      'U+0435': true,\n      'U+0436': true,\n      'U+0437': true,\n      'U+0438': true,\n      'U+0439': true,\n      'U+043A': true,\n      'U+043B': true,\n      'U+043C': true,\n      'U+043D': true,\n      'U+043E': true,\n      'U+043F': true,\n      'U+0440': true,\n      'U+0441': true,\n      'U+0442': true,\n      'U+0443': true,\n      'U+0444': true,\n      'U+0445': true,\n      'U+0446': true,\n      'U+0447': true,\n      'U+0448': true,\n      'U+0449': true,\n      'U+044A': true,\n      'U+044C': true,\n      'U+044E': true,\n      'U+044F': true,\n      'U+045D': true\n    }\n  }\n};\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport moment, {MomentInput} from 'moment';\nimport {\n  INPUT_MASK_REGEX,\n  INPUT_MASK_REGEX_ISO_DATE,\n  INPUT_UNSPECIFIED_REGEX,\n  INPUT_UNSPECIFIED_REGEX_ISO_DATE\n} from './data/date-formats';\nimport {din91379Characters} from './data/din-91379-characters';\nimport {AllowedSigns} from './model/din-91379';\n\n/**\n * List of user-defined validators. Can be extended with additional static validators\n */\nexport class Validation {\n  /**\n   * If the specified value is a valid date, it will be checked if the date is in the future.\n   * If the date corresponds to today's date or is in the past, a \"INVALIDFUTUREDATE\" error is thrown.\n   * For invalid dates, no error is thrown.\n   * @param c The control element the validator is appended to\n   * @returns The object {INVALIDFUTUREDATE: true} if the validation fails; null otherwise\n   */\n  static isInFuture(c: AbstractControl<MomentInput>): ValidationErrors | null {\n    const today = moment().startOf('day');\n    // It is not possible to check against a union type. Problem will disappear with moment.js replacement.\n    const dateValue = moment(c.value, [moment.ISO_8601, 'DD.MM.YYYY', 'DD-MM-YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY'], true);\n    if (dateValue.isValid() && dateValue.isSameOrBefore(today)) {\n      return {INVALIDFUTUREDATE: true};\n    }\n    return null;\n  }\n\n  /**\n   * If the given value is a valid date, it will be checked if the date is in the past.\n   * If the date is today's date or is in the future, a \"INVALIDPASTDATE\" error is thrown.\n   * For invalid dates, no error is thrown.\n   * @param c The control element the validator is appended to\n   * @returns The object {INVALIDPASTDATE: true} if the validation fails; null otherwise\n   */\n  static isInPast(c: AbstractControl<MomentInput>): ValidationErrors | null {\n    const today = moment().startOf('day');\n    // It is not possible to check against a union type. Problem will disappear with moment.js replacement.\n    const dateValue = moment(c.value, [moment.ISO_8601, 'DD.MM.YYYY', 'DD-MM-YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY'], true);\n    if (dateValue.isValid() && dateValue.isSameOrAfter(today)) {\n      return {INVALIDPASTDATE: true};\n    }\n    return null;\n  }\n\n  /**\n   * Checks that the date is a valid unspecified date or valid date in german format DD.MM.YYYY.\n   * If the date in german format is not valid and not unspecified, a \"DATE\" error is thrown.\n   * E.g. unspecified dates: 00.MM.YYYY, 00.00.YYYY, 00.00.0000, xx.MM.YYYY, xx.xx.YYYY, xx.xx.xxxx\n   * For valid or valid unspecified dates, no error is thrown.\n   * @param c The control element the validator is appended to\n   * @param allowZeroFormat If true, the zero date format should allowed\n   * @returns The object {INVALIDUNSPECIFIEDDATE: true} if the validation fails; null otherwise\n   */\n  static validUnspecifiedDate(c: AbstractControl, allowZeroFormat?: boolean): ValidationErrors | null {\n    const input = (c.value as string) ?? null;\n\n    if (!input) return null;\n\n    let isDateValid = false;\n\n    if (INPUT_MASK_REGEX.test(input)) {\n      const [day, month, year] = input.split('.');\n      const isoFormattedStr = `${year}-${month}-${day}`;\n\n      if (year === '0000' && !allowZeroFormat) return {INVALIDUNSPECIFIEDDATE: true};\n\n      if (!(input.includes('x') || day === '00' || month === '00')) {\n        const date = new Date(isoFormattedStr);\n        const timestamp = date.getTime();\n\n        if (!isNaN(timestamp)) isDateValid = date.toISOString().startsWith(isoFormattedStr);\n      }\n    }\n\n    if (!(INPUT_UNSPECIFIED_REGEX.test(input) || isDateValid)) return {INVALIDUNSPECIFIEDDATE: true};\n\n    return null;\n  }\n\n  /**\n   * Checks that the date is a valid unspecified date or valid date in ISO 8601 format YYYY-MM-DD.\n   * If the date in ISO 8601 format is not valid and not unspecified, a \"DATE\" error is thrown.\n   * E.g. unspecified dates: YYYY-MM-00, YYYY-00-00, 0000-00-00, YYYY-MM-xx, YYYY-xx-xx, xxxx-xx-xx\n   * For valid or valid unspecified dates, no error is thrown.\n   * @param c The control element the validator is appended to\n   * @param allowZeroFormat If true, the zero date format should allowed\n   * @returns The object {INVALIDUNSPECIFIEDISODATE: true} if the validation fails; null otherwise\n   */\n  static validUnspecifiedISODate(c: AbstractControl, allowZeroFormat = false): ValidationErrors | null {\n    const input = (c.value as string) ?? null;\n\n    if (!input) return null;\n\n    let isDateValid = false;\n\n    if (INPUT_MASK_REGEX_ISO_DATE.test(input)) {\n      const [year, month, day] = input.split('-');\n      const isoFormattedStr = `${year}-${month}-${day}`;\n\n      if (year === '0000' && !allowZeroFormat) return {INVALIDUNSPECIFIEDISODATE: true};\n\n      if (!(input.includes('x') || day === '00' || month === '00')) {\n        const date = new Date(isoFormattedStr);\n        const timestamp = date.getTime();\n\n        if (!isNaN(timestamp)) isDateValid = date.toISOString().startsWith(isoFormattedStr);\n      }\n    }\n\n    if (!(INPUT_UNSPECIFIED_REGEX_ISO_DATE.test(input) || isDateValid)) return {INVALIDUNSPECIFIEDISODATE: true};\n\n    return null;\n  }\n\n  /**\n   * Checks that the date is a valid date. To be used as a factory that returns a validator function.\n   * @param dateFormat The format to be checked.\n   * @param strict Strict parsing means that an exact match is required - including delimiters, whitespaces, etc.\n   * @param messageKey Key of the validator message\n   * @returns A validator function with the given configuration\n   */\n  static dateFormat(dateFormat: string, strict: boolean, messageKey: string): ValidatorFn {\n    return (c: AbstractControl<MomentInput>): ValidationErrors | null => {\n      const input = c.value;\n      if (!input) {\n        return null;\n      }\n      const parsedDate = moment(input, dateFormat, strict);\n      if (!dateFormat || !parsedDate?.isValid()) {\n        return {[messageKey]: {format: dateFormat}};\n      }\n\n      return null;\n    };\n  }\n\n  /**\n   * Checks if the date is a valid credit card expiration date. The date must be in the future.\n   * If the date is not a valid credit card expiration date, a \"INVALIDCREDITCARDEXPIRATIONDATE\" error is thrown.\n   * For valid credit card expiration dates, no error is thrown.\n   * @param c The control element the validator is appended to\n   * @returns The object {INVALIDCREDITCARDEXPIRATIONDATE: true} if the validation fails; null otherwise\n   */\n  static validCreditCardExpirationDate(c: AbstractControl<MomentInput>): ValidationErrors | null {\n    const today = moment().startOf('month');\n    if (c.value !== '') {\n      const dateValue = moment(c.value, ['MM/YY'], true);\n      if (!dateValue.isValid() || dateValue.isBefore(today)) {\n        return {INVALIDCREDITCARDEXPIRATIONDATE: true};\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Checks if the date is a valid date in ISO 8601 format.\n   * @param c The control element the validator is appended to\n   * @returns The object {DATE: true} if the validation fails; null otherwise\n   */\n  static isoDate(c: AbstractControl): ValidationErrors | null {\n    const isoDateValidatorFn: ValidatorFn = Validation.dateFormat('YYYY-MM-DD', true, 'INVALIDISODATE');\n    return isoDateValidatorFn(c);\n  }\n\n  /**\n   * Checks if it is a valid time in ISO 8601 format.\n   * @param c The control element the validator is appended to\n   * @returns The object {TIME: true} if the validation fails; null otherwise\n   */\n  static isoTime(c: AbstractControl): ValidationErrors | null {\n    const isoTimeValidatorFn: ValidatorFn = Validation.dateFormat('HH:mm:ss', true, 'INVALIDISOTIME');\n    return isoTimeValidatorFn(c);\n  }\n\n  /**\n   * Checks if the value of the control contains a valid date in ISO format.\n   * @param c The control element the validator is appended to\n   * @returns The object {DATETIME: true} if the validation fails; null otherwise\n   */\n  static isoDateTime(c: AbstractControl): ValidationErrors | null {\n    const isoDateTimeValidatorFn: ValidatorFn = Validation.dateFormat(\n      'YYYY-MM-DDTHH:mm:ss[Z]',\n      true,\n      'INVALIDISODATETIME'\n    );\n    return isoDateTimeValidatorFn(c);\n  }\n\n  /**\n   * Checks the entry to see if it is a valid credit card number. This is checked:\n   * - If input contains characters other than numbers, spaces, hyphens, an error is returned.\n   * - If the input is shorter than 12 characters or longer than 19 characters, an error is returned\n   * - Luhn algorithm is applied to the input, if the result is NOT modulo 10, an error is returned.\n   * @param c The control element the validator is appended to\n   * @returns The object {INVALIDCREDITCARDNUMBER: true} if the validation fails; null otherwise\n   */\n  static validCreditCardNumber(c: AbstractControl): ValidationErrors | null {\n    const minLength = 12,\n      maxLength = 19;\n\n    let value = c.value as string;\n    if (!value) {\n      return null;\n    }\n\n    // If the input contains characters other than Numbers\n    if (/[^0-9-\\s]+/.test(value)) {\n      return {INVALIDCREDITCARDNUMBER: true};\n    }\n\n    if (value.length > maxLength || value.length < minLength) {\n      return {INVALIDCREDITCARDNUMBER: true};\n    }\n\n    // Execution of the Luhn algorithm (specific fixed numbers required)\n    const radix = 10;\n    const digitsMultiplier = 2;\n    let nCheck = 0;\n    let bEven = false;\n\n    value = value.replace(/\\D/g, '');\n\n    for (let n = value.length - 1; n >= 0; n--) {\n      const cDigit = value.charAt(n);\n      let nDigit = parseInt(cDigit, radix);\n\n      if (bEven) {\n        if ((nDigit *= digitsMultiplier) > radix - 1) {\n          nDigit -= radix - 1;\n        }\n      }\n\n      nCheck += nDigit;\n      bEven = !bEven;\n    }\n\n    if (nCheck % radix !== 0) {\n      return {INVALIDCREDITCARDNUMBER: true};\n    }\n\n    return null;\n  }\n\n  /**\n   * Validates a string based on the DIN 91379 standard for the specified data type.\n   * @param dataType - The type of data to validate. It can be one of the following:\n   *   - 'A': Type A\n   *   - 'B': Type B\n   *   - 'C': Type C\n   *   - 'D': Type D\n   *   - 'E': Type E\n   * @returns A ValidatorFn that takes an AbstractControl and returns a ValidationErrors object\n   * if the control's value contains characters not allowed by the DIN 91379 standard for the specified data type\n   * or null if the value is valid or empty.\n   */\n  static validateDIN91379(dataType: 'A' | 'B' | 'C' | 'D' | 'E'): ValidatorFn {\n    return (c: AbstractControl): ValidationErrors | null => {\n      const value: string = c.value as string;\n\n      if (!value) {\n        return null;\n      }\n\n      const allowedCharacters = Validation.getAllowedCharactersByType(dataType);\n      const nonDinChars = Validation.getNonDinChars(value, allowedCharacters);\n\n      return nonDinChars.length > 0 ? {DIN91379ERROR: true} : null;\n    };\n  }\n\n  /**\n   * Identifies and returns an array of characters from the input string `value` that do not conform to the DIN norm.\n   * The function checks each character and its potential diacritics against the allowed characters and diacritics\n   * specified in the `allowedCharacters` parameter.\n   * @param value - The input string to be validated.\n   * @param allowedCharacters - An object containing the allowed characters as per DIN norms.\n   * @returns An array of characters from the input string that are not allowed by DIN norms.\n   */\n  private static getNonDinChars(value: string, allowedCharacters: AllowedSigns): string[] {\n    const nonDinChars = [];\n    const SINGLE_STEP = 1;\n    const DIACRITIC_STEP = 2;\n\n    for (let i = 0; i < value.length; ) {\n      const {unicodeCharacter, step} = this.processCharacter(value, i, allowedCharacters, SINGLE_STEP, DIACRITIC_STEP);\n      if (unicodeCharacter) {\n        nonDinChars.push(unicodeCharacter);\n      }\n      i += step;\n    }\n    return nonDinChars;\n  }\n\n  /**\n   * Processes a character from the given string value at the specified index.\n   * Determines if the character is allowed based on the provided allowed characters.\n   * If the character is allowed, it processes it accordingly; otherwise, it returns the character itself.\n   * @param value - The string value containing the character to process.\n   * @param index - The index of the character in the string value.\n   * @param allowedCharacters - An object containing the allowed characters.\n   * @param SINGLE_STEP - The step value to use for single characters.\n   * @param DIACRITIC_STEP - The step value to use for diacritic characters.\n   * @returns An object containing the processed unicode character and the step value.\n   */\n  private static processCharacter(\n    value: string,\n    index: number,\n    allowedCharacters: AllowedSigns,\n    SINGLE_STEP: number,\n    DIACRITIC_STEP: number\n  ): {unicodeCharacter: string | null; step: number} {\n    const unicodeCharacter = `U+${Validation.getHexCodePoint(value, index)}`;\n    const step = SINGLE_STEP;\n\n    if (allowedCharacters.allowed.hasOwnProperty(unicodeCharacter)) {\n      return this.processAllowedCharacter(value, index, allowedCharacters, SINGLE_STEP, DIACRITIC_STEP);\n    } else {\n      return {unicodeCharacter: value.charAt(index), step};\n    }\n  }\n\n  /**\n   * Processes a character at a given index in a string to determine if it is an allowed character,\n   * including handling diacritic characters.\n   * @param value - The string containing the character to process.\n   * @param index - The index of the character in the string to process.\n   * @param allowedCharacters - An object containing sets of allowed characters and diacritic characters.\n   * @param SINGLE_STEP - The step size for a single character.\n   * @param DIACRITIC_STEP - The step size for a diacritic character.\n   * @returns An object containing the Unicode representation of the character and the step size.\n   */\n  private static processAllowedCharacter(\n    value: string,\n    index: number,\n    allowedCharacters: AllowedSigns,\n    SINGLE_STEP: number,\n    DIACRITIC_STEP: number\n  ): {unicodeCharacter: string | null; step: number} {\n    let unicodeCharacter = `U+${Validation.getHexCodePoint(value, index)}`;\n    const step = SINGLE_STEP;\n\n    if (\n      index + SINGLE_STEP < value.length &&\n      allowedCharacters.diacritic?.hasOwnProperty(`U+${Validation.getHexCodePoint(value, index + SINGLE_STEP)}`)\n    ) {\n      const hasAdditionalDiacritic = Validation.hasAdditionalDiacritic(value, index, DIACRITIC_STEP, allowedCharacters);\n      const hasAdditionalAllowed = Validation.hasAdditionalAllowed(value, index, DIACRITIC_STEP, allowedCharacters);\n\n      unicodeCharacter += `+${Validation.getHexCodePoint(value, index + SINGLE_STEP)}`;\n\n      if (hasAdditionalDiacritic || hasAdditionalAllowed) {\n        return this.processAdditionalDiacritic(\n          value,\n          index,\n          allowedCharacters,\n          unicodeCharacter,\n          DIACRITIC_STEP,\n          SINGLE_STEP\n        );\n      } else {\n        return this.processSingleDiacritic(value, index, allowedCharacters, unicodeCharacter, SINGLE_STEP);\n      }\n    }\n\n    return {unicodeCharacter: null, step};\n  }\n\n  /**\n   * Processes additional diacritic characters in a given string value.\n   * @param value - The string value to process.\n   * @param index - The current index in the string value.\n   * @param allowedCharacters - An object containing allowed characters.\n   * @param unicodeCharacter - The current unicode character being processed.\n   * @param DIACRITIC_STEP - The step size for diacritic characters.\n   * @param SINGLE_STEP - The step size for single characters.\n   * @returns An object containing the combined unicode character (if any) and the step size.\n   */\n  private static processAdditionalDiacritic(\n    value: string,\n    index: number,\n    allowedCharacters: AllowedSigns,\n    unicodeCharacter: string,\n    DIACRITIC_STEP: number,\n    SINGLE_STEP: number\n  ): {unicodeCharacter: string | null; step: number} {\n    if (\n      !allowedCharacters.allowed.hasOwnProperty(\n        `${unicodeCharacter}+${Validation.getHexCodePoint(value, index + DIACRITIC_STEP)}`\n      )\n    ) {\n      const combinedChar = `${value.charAt(index)}${value.charAt(index + SINGLE_STEP)}${value.charAt(index + DIACRITIC_STEP)}`;\n      return {unicodeCharacter: combinedChar, step: DIACRITIC_STEP + SINGLE_STEP};\n    }\n    return {unicodeCharacter: null, step: DIACRITIC_STEP + SINGLE_STEP};\n  }\n\n  /**\n   * Processes a single diacritic character in a string.\n   * @param value - The string value being processed.\n   * @param index - The current index in the string.\n   * @param allowedCharacters - An object containing allowed characters.\n   * @param unicodeCharacter - The current unicode character being processed.\n   * @param SINGLE_STEP - The step size for processing characters.\n   * @returns An object containing the combined unicode character (if not allowed) and the step size.\n   */\n  private static processSingleDiacritic(\n    value: string,\n    index: number,\n    allowedCharacters: AllowedSigns,\n    unicodeCharacter: string,\n    SINGLE_STEP: number\n  ): {unicodeCharacter: string | null; step: number} {\n    if (!allowedCharacters.allowed.hasOwnProperty(unicodeCharacter)) {\n      const combinedChar = `${value.charAt(index)}${value.charAt(index + SINGLE_STEP)}`;\n      return {unicodeCharacter: combinedChar, step: SINGLE_STEP + SINGLE_STEP};\n    }\n    return {unicodeCharacter: null, step: SINGLE_STEP + SINGLE_STEP};\n  }\n\n  /**\n   * Checks if the character at the specified index in the given string has an additional diacritic.\n   * @param value - The string to check for additional diacritics.\n   * @param index - The index of the character in the string to check.\n   * @param additionalDiacriticIndex - The offset index to check for an additional diacritic.\n   * @param allowedCharacters - An object containing allowed characters and their diacritics.\n   * @returns `true` if the character at the specified index has an additional diacritic; otherwise, `false`.\n   */\n  private static hasAdditionalDiacritic(\n    value: string,\n    index: number,\n    additionalDiacriticIndex: number,\n    allowedCharacters: AllowedSigns\n  ): boolean {\n    return (\n      index + additionalDiacriticIndex < value.length &&\n      !!allowedCharacters.diacritic?.hasOwnProperty(\n        `U+${Validation.getHexCodePoint(value, index + additionalDiacriticIndex)}`\n      )\n    );\n  }\n\n  /**\n   * Checks if the character at the specified index in the given string has an additional allowed diacritic.\n   * @param value - The string to be checked.\n   * @param index - The current index of the character in the string.\n   * @param additionalDiacriticIndex - The index offset for the additional diacritic.\n   * @param allowedCharacters - An object containing allowed characters.\n   * @returns `true` if the character at the specified index has an additional allowed diacritic, otherwise `false`.\n   */\n  private static hasAdditionalAllowed(\n    value: string,\n    index: number,\n    additionalDiacriticIndex: number,\n    allowedCharacters: AllowedSigns\n  ): boolean {\n    const SINGLE_STEP = 1;\n\n    return (\n      index + additionalDiacriticIndex < value.length &&\n      Validation.getHexCodePoint(value, index + SINGLE_STEP) === '035F' &&\n      allowedCharacters.allowed.hasOwnProperty(\n        `U+${Validation.getHexCodePoint(value, index + additionalDiacriticIndex)}`\n      )\n    );\n  }\n\n  /**\n   * Returns the allowed characters based on the specified type.\n   * @param dataType - The type of data for which allowed characters are to be retrieved.\n   *                   It can be one of the following values:\n   *                   - 'A': Includes latin and n1 characters.\n   *                   - 'B': Includes latin, n1, and n2 characters.\n   *                   - 'C': Includes latin, n1, n2, n3, and n4 characters.\n   *                   - 'D': Includes latin, n1, n2, n3, n4, e1, and eGreek characters.\n   *                   - 'E': Includes latin, n1, n2, n3, n4, e1, eGreek, and eCyrillic characters.\n   * @returns An object containing the allowed characters and diacritic characters for the specified type.\n   */\n  static getAllowedCharactersByType(dataType: 'A' | 'B' | 'C' | 'D' | 'E'): AllowedSigns {\n    switch (dataType) {\n      case 'A':\n        return Validation.mergeObjects(din91379Characters.latin, din91379Characters.n1);\n      case 'B':\n        return Validation.mergeObjects(din91379Characters.latin, din91379Characters.n1, din91379Characters.n2);\n      case 'C':\n        return Validation.mergeObjects(\n          din91379Characters.latin,\n          din91379Characters.n1,\n          din91379Characters.n2,\n          din91379Characters.n3,\n          din91379Characters.n4\n        );\n      case 'D':\n        return Validation.mergeObjects(\n          din91379Characters.latin,\n          din91379Characters.n1,\n          din91379Characters.n2,\n          din91379Characters.n3,\n          din91379Characters.n4,\n          din91379Characters.e1,\n          din91379Characters.eGreek\n        );\n      case 'E':\n        return Validation.mergeObjects(\n          din91379Characters.latin,\n          din91379Characters.n1,\n          din91379Characters.n2,\n          din91379Characters.n3,\n          din91379Characters.n4,\n          din91379Characters.e1,\n          din91379Characters.eGreek,\n          din91379Characters.eCyrillic\n        );\n      default:\n        return {allowed: {}, diacritic: {}};\n    }\n  }\n\n  /**\n   * Converts the Unicode code point at the specified index in the input string to a hexadecimal string.\n   * If the input is null, undefined or not a string, returns '0000'.\n   * If the index is out of bounds or the code point is NaN, returns '0000'.\n   * @param input - The input string from which to get the code point.\n   * @param index - The index of the character in the string to convert to a hexadecimal code point.\n   * @returns The hexadecimal representation of the Unicode code point, padded to 4 characters.\n   */\n  static getHexCodePoint(input: string | null | undefined, index: number): string {\n    if (!input || typeof input !== 'string') {\n      return '0000';\n    }\n\n    const code = input.charCodeAt(index);\n    const hexBase = 16;\n    const hexStringLength = 4;\n\n    return isNaN(code) ? '0000' : code.toString(hexBase).toUpperCase().padStart(hexStringLength, '0');\n  }\n\n  /**\n   * Merges multiple `AllowedSigns` objects into a single `AllowedSigns` object.\n   * @param objects - The `AllowedSigns` objects to merge.\n   * @returns The merged `AllowedSigns` object containing combined `allowed` and `diacritic` properties.\n   */\n  private static mergeObjects(...objects: AllowedSigns[]): AllowedSigns {\n    const mergedAllowed: {[key: string]: boolean} = {};\n    const mergedDiacritic: {[key: string]: boolean} = {};\n\n    objects.forEach((obj) => {\n      Object.assign(mergedAllowed, obj.allowed);\n      Object.assign(mergedDiacritic, obj.diacritic);\n    });\n\n    return {allowed: mergedAllowed, diacritic: mergedDiacritic};\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Injector,\n  Input,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormsModule,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport {IncompleteDateService} from './incomplete-date.service';\nimport {Validation} from '../validation/validation';\nimport {InputMask, InputMaskModule} from 'primeng/inputmask';\nimport {InputTextModule} from 'primeng/inputtext';\n\nenum CursorPosition {\n  DayFirstDigit = 0,\n  DaySecondDigit = 1,\n  DotAfterDay = 2,\n  MonthSecondDigit = 4,\n  DotAfterMonth = 5\n}\n\nconst CURSOR_SHIFT = {\n  Small: 1,\n  Medium: 2,\n  Large: 3\n};\n\n/**\n * This component is used to input complete and incomplete dates.\n * To enter an unknown day or month,  `0` or `x` can be used.\n *\n * The format DD.MM.YYYY is supported by the widget\n *\n * == Century switch / Birthdays in the past\n *\n * If only past dates are allowed (e.g. for already born persons),\n * the property `dateInPastConstraint` can be set to `true`via binding.\n *\n * When autocompleting e.g. 10.10.50, 10.10.1950 will be the output instead of 10.10.2050.\n */\n@Component({\n  standalone: true,\n  selector: 'isy-incomplete-date',\n  templateUrl: './incomplete-date.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => IncompleteDateComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => IncompleteDateComponent),\n      multi: true\n    }\n  ],\n  imports: [FormsModule, InputTextModule, InputMaskModule]\n})\nexport class IncompleteDateComponent implements ControlValueAccessor, Validator, OnInit, AfterViewInit {\n  /**\n   * A disabled date picker can't be opened.\n   */\n  @Input() disabled = false;\n\n  /**\n   * Determines whether the date picker takes input.\n   */\n  @Input() readonly = false;\n\n  /**\n   * The label for the input element.\n   */\n  @Input() inputLabel = '';\n\n  /**\n   * The placeholder for the input element.\n   */\n  @Input() placeholder = '';\n\n  /**\n   * Decides whether only past dates are allowed (century switch - instead of 2050 e.g. 1950)\n   */\n  @Input() dateInPastConstraint = false;\n\n  @Input() inputId?: string;\n\n  /**\n   * Currently displayed date string\n   */\n  inputValue: string = '';\n\n  /**\n   * Specifies whether to transfer the date value in ISO 8601 format.\n   * If set to true, the date value will be transferred in ISO 8601 format (YYYY-MM-DD).\n   * If set to false, the date value will be transferred in German date format (DD.MM.YYYY).\n   */\n  @Input() transferISO8601 = false;\n\n  /**\n   * @deprecated using the format \"00.00.0000\" for unknown dates is deprecated and will be removed in the future. Use \"xx.xx.xxxx\" instead.\n   */\n  @Input() allowZeroFormat = false;\n\n  // ISO string data-side date format\n  transferValue?: string;\n\n  // To align with PrimeNG API\n  // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n  @Output() onInput: EventEmitter<Event> = new EventEmitter<Event>();\n\n  @ViewChild(InputMask) field?: InputMask;\n\n  lastKeyPressed: string = '';\n  lastInputElement: HTMLInputElement | null = null;\n\n  /**\n   * The service that contains date transformation logic\n   */\n  private readonly incompleteDateService = inject(IncompleteDateService);\n\n  private readonly injector = inject(Injector);\n\n  private get ngControl(): NgControl | null {\n    return this.injector.get(NgControl, null, {self: true});\n  }\n\n  get isInvalid(): boolean {\n    return !!this.ngControl?.invalid && (!!this.ngControl?.touched || !!this.ngControl?.dirty);\n  }\n\n  ngAfterViewInit(): void {\n    if (this.transferISO8601) this.onChange(this.inputValue);\n  }\n\n  /**\n   * Initializes readonly and disabled properties\n   */\n  ngOnInit(): void {\n    // Enable syntax <isy-incomplete-date readonly /> (isReadOnly has value \"\" which is true as boolean)\n    this.readonly = this.readonly || this.readonly === ('' as unknown);\n    this.disabled = this.disabled || this.disabled === ('' as unknown);\n  }\n\n  /**\n   * If `transferISO8601` is true, it calls `Validation.validUnspecifiedISODate` to validate the control.\n   * Otherwise, it calls `Validation.validUnspecifiedDate` to validate the control.\n   * The Validation checks that the date is a valid unspecified date or valid date in German format DD.MM.YYYY resp. ISO 8601 YYYY-MM-DD.\n   * If the date is invalid and not unspecified, a `INVALIDUNSPECIFIEDISODATE` resp. `INVALIDUNSPECIFIEDISODATE` error is thrown.\n   * If the year is '0000' and `allowZeroFormat` is false, a `INVALIDUNSPECIFIEDISODATE` resp. `INVALIDUNSPECIFIEDISODATE` error is thrown.\n   * E.g. unspecified dates: 00.MM.YYYY, 00.00.YYYY, 00.00.0000, xx.MM.YYYY, xx.xx.YYYY, xx.xx.xxxx,\n   * YYYY-MM-00, YYYY-00-00, 0000-00-00, YYYY-MM-xx, YYYY-xx-xx, xxxx-xx-xx\n   * For valid or valid unspecified dates, no error is thrown.\n   * @param c The abstract control to validate.\n   * @returns A `ValidationErrors` object if the control is invalid, otherwise null.\n   */\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.transferISO8601\n      ? Validation.validUnspecifiedISODate(c, this.allowZeroFormat)\n      : Validation.validUnspecifiedDate(c, this.allowZeroFormat);\n  }\n\n  /**\n   * Called by the Forms module to write a value into a form control\n   * @param value The new value\n   */\n  writeValue(value: string): void {\n    this.inputValue = value;\n  }\n\n  /**\n   * Handles the keydown event for the input element.\n   * Stores the last key pressed and the input element that triggered the event.\n   * @param event - The keyboard event triggered by the user.\n   */\n  onKeydown(event: Event): void {\n    this.lastKeyPressed = (event as KeyboardEvent).key;\n    this.lastInputElement = event.target as HTMLInputElement;\n  }\n\n  /**\n   * Handles changes to the date input model, updating the input value and cursor position as needed.\n   * This method processes the input value when the user interacts with the date field, specifically\n   * when editing the day or month parts. It replaces incomplete day or month values with a specified\n   * character if necessary, updates the input field, and recalculates the cursor position to ensure\n   * a smooth user experience.\n   * @param value - The current value of the date input in the format \"DD.MM.YYYY\".\n   */\n  onModelChange(value: string): void {\n    const input = this.lastInputElement;\n\n    if (!input) return;\n\n    const cursorPos = input.selectionStart ?? 0;\n    const [day = '', month = '', year = ''] = value.split('.');\n    let partDay = day;\n    let partMonth = month;\n    const dayClean = day.replace(/_/g, '');\n    const monthClean = month.replace(/_/g, '');\n    const unspecifiedChar = 'x';\n\n    this.inputValue = value;\n\n    const isInDayOrMonthRange = this.lastKeyPressed === '.' && cursorPos <= (CursorPosition.DotAfterMonth as number);\n\n    if (isInDayOrMonthRange) {\n      if (dayClean.length <= 1) partDay = this.transformDatePart(day, unspecifiedChar);\n\n      if (\n        cursorPos >= (CursorPosition.DotAfterDay as number) + 1 &&\n        cursorPos <= (CursorPosition.DotAfterMonth as number) &&\n        monthClean.length <= 1\n      ) {\n        if (cursorPos > (CursorPosition.DotAfterDay as number) + 1)\n          partMonth = this.transformDatePart(month, unspecifiedChar);\n      }\n\n      const result = [partDay, partMonth, year].join('.');\n      input.value = this.inputValue = result;\n\n      const newCursor = this.calculateNewCursorPosition(cursorPos);\n      input.setSelectionRange(newCursor, newCursor);\n    }\n  }\n\n  /**\n   * Calculates the new cursor position\n   * @param position as a number\n   * @returns position as a number\n   */\n  calculateNewCursorPosition(position: CursorPosition): number {\n    switch (position) {\n      case CursorPosition.DayFirstDigit:\n        return position + CURSOR_SHIFT.Large;\n      case CursorPosition.DaySecondDigit:\n      case CursorPosition.MonthSecondDigit:\n        return position + CURSOR_SHIFT.Medium;\n      case CursorPosition.DotAfterDay:\n      case CursorPosition.DotAfterMonth:\n        return position + CURSOR_SHIFT.Small;\n      default:\n        return position;\n    }\n  }\n\n  /**\n   * Transforms a part of a date string\n   * @param partOfDate part of a date as a string\n   * @param char unspecified character as a string\n   * @returns transformed part of a date\n   */\n  transformDatePart(partOfDate: string, char: string): string {\n    const partOfDateReplaced = partOfDate.replace(/_/g, '');\n\n    return partOfDateReplaced === char || partOfDateReplaced.length === 0\n      ? char.repeat(partOfDate.length)\n      : '0' + partOfDateReplaced;\n  }\n\n  /**\n   * Transforms the input value if necessary and updates it when user completes the mask pattern\n   */\n  onComplete(): void {\n    this.inputValue = this.incompleteDateService.transformValue(\n      this.inputValue,\n      this.dateInPastConstraint,\n      this.allowZeroFormat\n    );\n    this.updateModel();\n  }\n\n  /**\n   * Transforms the current input on losing the focus\n   */\n  onBlur(): void {\n    if (this.inputValue) {\n      this.inputValue = this.incompleteDateService.transformValue(\n        this.inputValue,\n        this.dateInPastConstraint,\n        this.allowZeroFormat\n      );\n    }\n\n    const inputEl = this.field?.inputViewChild!.nativeElement as HTMLInputElement;\n    if (inputEl) {\n      inputEl.value = this.inputValue;\n      if (this.inputValue.includes('_')) {\n        inputEl.value = this.inputValue = '';\n      }\n    }\n\n    this.onTouched();\n    this.updateModel();\n  }\n\n  onInputChange(event: Event): void {\n    this.onInput.emit(event);\n  }\n\n  /**\n   * Updates the internal model by converting the current input value to the transfer date format\n   * and propagates the change to registered listeners.\n   */\n  updateModel(): void {\n    this.transferValue = this.convertToTransferDateFormat(this.inputValue);\n    this.onChange(this.transferValue);\n  }\n\n  /**\n   * Reports the value back to the parent form\n   * Calls the given function on component change\n   * @param fn The function to be called on component change\n   */\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = (value): void => {\n      this.transferValue = this.convertToTransferDateFormat(value);\n      fn(this.transferValue);\n    };\n  }\n\n  /**\n   * Reports to the parent form that the control was touched\n   * Calls the given function on component touch\n   * @param fn The function to be called on component touch\n   */\n  registerOnTouched(fn: unknown): void {\n    this.onTouched = fn as () => unknown;\n  }\n\n  /**\n   * Transmits the state (enabled/disabled) to the form control\n   * Enables or disables the component\n   * @param isDisabled True to disable the component; false to enable the component\n   */\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  /**\n   * Converts the given value to the transfer date format.\n   * If `transferISO8601` is true, the value is expected to be in the format \"dd.mm.yyyy\".\n   * Otherwise, the original value is returned.\n   * @param value - The value to convert.\n   * @returns The converted value in the format \"yyyy-mm-dd\" if `transferISO8601` is true, otherwise the original value.\n   */\n  convertToTransferDateFormat(value: string): string {\n    if (!this.transferISO8601) return value;\n\n    const [day, month, year] = value.split('.');\n    return `${year}-${month}-${day}`;\n  }\n\n  onChange: (value: string) => unknown = () => {};\n\n  onTouched: () => void = () => {};\n}\n","<p-inputmask\n  [readonly]=\"readonly\"\n  [disabled]=\"disabled\"\n  (onInput)=\"onInputChange($event)\"\n  (onBlur)=\"onBlur()\"\n  (onComplete)=\"onComplete()\"\n  (onKeydown)=\"onKeydown($event)\"\n  mask=\"**.**.****\"\n  [ngModel]=\"inputValue\"\n  (ngModelChange)=\"onModelChange($event)\"\n  characterPattern=\"^[x]\"\n  [placeholder]=\"placeholder\"\n  [inputId]=\"inputId!\"\n  [autoClear]=\"false\"\n  styleClass=\"w-full\"\n  [invalid]=\"isInvalid\"\n/>\n","import {Directive, inject, Input, TemplateRef} from '@angular/core';\n\n/**\n * To be used for each site of an isy-wizard.\n */\n@Directive({\n  selector: '[isyWizardDirective]'\n})\nexport class WizardDirective {\n  @Input() isyWizardDirective: string = '';\n\n  templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  QueryList,\n  SimpleChanges\n} from '@angular/core';\nimport {MenuItem, MessageService} from 'primeng/api';\nimport {WizardDirective} from '../../directives/wizard.directive';\nimport {WidgetsConfigService} from '../../../i18n/widgets-config.service';\nimport {CommonModule} from '@angular/common';\nimport {StepsModule} from 'primeng/steps';\nimport {DialogModule} from 'primeng/dialog';\nimport {ButtonModule} from 'primeng/button';\nimport {ToastModule} from 'primeng/toast';\n\n/**\n * The width of the wizard of not otherwise specified by the user.\n * @internal\n */\nconst defaultWidth = 50;\n\n/**\n * The height of the wizard of not otherwise specified by the user.\n * @internal\n */\nconst defaultHeight = 30;\n\n/**\n * A wizard that guides the user step by step through series of forms.\n * Each side needs to have the @link{WizardDirective}.\n */\n@Component({\n  standalone: true,\n  selector: 'isy-wizard',\n  templateUrl: './wizard.component.html',\n  imports: [CommonModule, StepsModule, DialogModule, ButtonModule, ToastModule],\n  providers: [MessageService]\n})\nexport class WizardComponent implements OnInit, AfterContentInit, OnChanges {\n  /**\n   * Stores the content that will be projected inside the template\n   */\n  @ContentChildren(WizardDirective) content?: QueryList<WizardDirective>;\n\n  /**\n   * Emits the currently displayed page\n   */\n  @Output() indexChange = new EventEmitter<number>();\n\n  /**\n   * Emits when the user is currently trying to save to be handled from outside\n   */\n  @Output() savingChange = new EventEmitter<boolean>();\n\n  /**\n   * Emits the current visibility status\n   */\n  @Output() isVisibleChange = new EventEmitter<boolean>();\n\n  /**\n   * Determines whether the wizard is visible\n   */\n  @Input() isVisible: boolean = false;\n\n  /**\n   * Determines whether the wizard is draggable\n   */\n  @Input() draggable: boolean = false;\n\n  /**\n   * Determines whether the wizard is closable\n   */\n  @Input() closable: boolean = true;\n\n  /**\n   * Determines if the modal behind the wizard dialog is displayed\n   */\n  @Input() modal: boolean = true;\n\n  /**\n   * A title to show\n   */\n  @Input() headerTitle: string = '';\n\n  /**\n   * The wizard width in %.\n   * Default is 50\n   */\n  @Input() width: number = defaultWidth;\n\n  /**\n   * The wizard height  in %.\n   * Default is 30\n   */\n  @Input() height: number = defaultHeight;\n\n  /**\n   * The text of the back button\n   */\n  @Input() labelBackButton = 'Zurück';\n\n  /**\n   * The text of the next button\n   */\n  @Input() labelNextButton = 'Weiter';\n\n  /**\n   * The text of the save button\n   */\n  @Input() labelSaveButton = 'Speichern';\n\n  /**\n   * The text of the close button\n   */\n  @Input() labelCloseButton = 'Schließen';\n\n  /**\n   * Controls whether the next button is enabled which is to be controlled from the outside (e.g. for validation)\n   */\n  @Input() allowNext: boolean = false;\n\n  /**\n   * Determines if the system is saving now\n   */\n  @Input() isSaved: boolean = false;\n\n  /**\n   * The current wizard index\n   */\n  @Input() index: number = 0;\n\n  /**\n   * Breakpoint for PrimeNg dialog responsiveness\n   */\n  @Input() breaktpoints: {[key: string]: string} = {\n    '3840px': '95vw',\n    '1920px': '95vw',\n    '1366px': '85vw',\n    '768px': '95vw',\n    '412px': '95vw'\n  };\n\n  @Input() allowFreeNavigation = false;\n\n  /**\n   * Stores the items of the wizard\n   */\n  items: MenuItem[] = [];\n\n  /**\n   * A service used to translate labels within the widgets library.\n   */\n  configService = inject(WidgetsConfigService);\n\n  readonly messageService = inject(MessageService);\n\n  /**\n   * Fired on initialization\n   */\n  ngOnInit(): void {\n    this.indexChange.emit(this.index);\n  }\n\n  /**\n   * Fired after content initialization\n   */\n  ngAfterContentInit(): void {\n    if (this.content) {\n      this.items = this.content.map((item) => {\n        return {\n          label: item.isyWizardDirective\n        };\n      });\n    }\n  }\n\n  /**\n   * Fired on changes\n   * @param changes Includes all DOM changes\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.isVisible && changes.isVisible?.currentValue === false) {\n      this.resetWizard();\n    }\n  }\n\n  /**\n   * Moves the wizard to the next position\n   */\n  next(): void {\n    this.index++;\n    this.indexChange.emit(this.index);\n  }\n\n  /**\n   * Moves the wizard to the previous position\n   */\n  previous(): void {\n    this.index--;\n    this.indexChange.emit(this.index);\n  }\n\n  /**\n   * Is closing the dialog\n   */\n  closeDialog(): void {\n    this.resetWizard();\n    this.close();\n  }\n\n  /**\n   * Resets the wizard position\n   */\n  private resetWizard(): void {\n    this.index = 0;\n  }\n\n  /**\n   * Is closing the wizard\n   */\n  private close(): void {\n    this.isVisible = false;\n    this.isVisibleChange.emit(this.isVisible);\n  }\n\n  /**\n   * Informs about the save action\n   */\n  save(): void {\n    this.savingChange.emit(true);\n  }\n\n  /**\n   * Handles the change of the active index in the wizard component.\n   * Updates the current index, emits the index change event, and displays\n   * a toast message indicating the step change.\n   * @param event - The new active index of the wizard.\n   */\n  onActiveIndexChange(event: number): void {\n    this.index = event;\n    this.indexChange.emit(this.index);\n\n    // Show a toast message indicating the step change\n    this.messageService.add({\n      severity: 'info',\n      summary: this.configService.getTranslation('wizard.toast.stepChanged'),\n      detail: this.items[this.index].label\n    });\n  }\n}\n","<p-toast [baseZIndex]=\"2000\" />\n<p-dialog\n  [header]=\"headerTitle\"\n  [closeAriaLabel]=\"configService.getTranslation('wizard.aria.close')\"\n  [(visible)]=\"isVisible\"\n  [modal]=\"modal\"\n  [closable]=\"closable\"\n  [draggable]=\"draggable\"\n  [breakpoints]=\"breaktpoints\"\n  [style]=\"{\n    width: width + 'vw',\n    height: height + 'vw'\n  }\"\n  (visibleChange)=\"isVisibleChange.emit($event)\"\n>\n  <p-steps\n    [model]=\"items\"\n    [(activeIndex)]=\"index\"\n    [readonly]=\"!allowFreeNavigation\"\n    (activeIndexChange)=\"allowFreeNavigation ? onActiveIndexChange($event) : null\"\n  />\n\n  <ng-container [ngTemplateOutlet]=\"this.content?.get(index)?.templateRef ?? null\"></ng-container>\n\n  <ng-template pTemplate=\"footer\">\n    <div class=\"flex justify-content-end flex-wrap card-container\">\n      @if (!isSaved) {\n        @if (index !== 0) {\n          <button\n            id=\"back-button\"\n            type=\"button\"\n            pRipple\n            pButton\n            [outlined]=\"true\"\n            [class]=\"'flex align-items-center justify-content-center mr-2'\"\n            (click)=\"previous()\"\n          >\n            {{ labelBackButton }}\n          </button>\n        }\n        @if (index !== items.length - 1) {\n          <button\n            id=\"next-button\"\n            type=\"button\"\n            pRipple\n            pButton\n            [class]=\"'flex align-items-center justify-content-center mr-4'\"\n            [disabled]=\"index === items.length - 1 || !allowNext\"\n            (click)=\"next()\"\n          >\n            {{ labelNextButton }}\n          </button>\n        }\n      }\n\n      @if (index === items.length - 1 && !isSaved) {\n        <button\n          id=\"save-button\"\n          type=\"button\"\n          pRipple\n          pButton\n          [class]=\"'flex align-items-center justify-content-center ml-4'\"\n          [disabled]=\"(index !== items.length - 1 || !allowNext) && !isSaved\"\n          (click)=\"save()\"\n        >\n          {{ labelSaveButton }}\n        </button>\n      }\n\n      <button\n        id=\"close-button\"\n        type=\"button\"\n        pRipple\n        pButton\n        [outlined]=\"true\"\n        [class]=\"'flex align-items-center justify-content-center'\"\n        [disabled]=\"isSaved && !closable\"\n        (click)=\"closeDialog()\"\n      >\n        {{ labelCloseButton }}\n      </button>\n    </div>\n  </ng-template>\n</p-dialog>\n","/**\n * Data types according to DIN 91379\n */\nexport enum Datentyp {\n  /** Data type A. */\n  DATENTYP_A = 'DATENTYP_A',\n\n  /** Data type B. */\n  DATENTYP_B = 'DATENTYP_B',\n\n  /** Data type C. */\n  DATENTYP_C = 'DATENTYP_C',\n\n  /** Data type D. */\n  DATENTYP_D = 'DATENTYP_D',\n\n  /** Data type E. */\n  DATENTYP_E = 'DATENTYP_E'\n}\n","/**\n * @internal\n */\nexport enum Schriftzeichengruppe {\n  /** Lateinische Buchstaben. */\n  LATEIN = 'LATEIN',\n\n  /** Nicht-Buchstaben N1. */\n  N1 = 'N1',\n\n  /** Nicht-Buchstaben N2. */\n  N2 = 'N2',\n\n  /** Nicht-Buchstaben N3. */\n  N3 = 'N3',\n\n  /** Nicht-Buchstaben N4. */\n  N4 = 'N4',\n\n  /** Nicht-Buchstaben E1. */\n  E1 = 'E1',\n\n  /** Griechische Buchstaben. */\n  GRIECHISCH = 'GRIECHISCH',\n\n  /** Kyrillische Buchstaben. */\n  KYRILLISCH = 'KYRILLISCH'\n}\n\n/**\n * @internal\n */\nexport enum ButtonTypeIdentifier {\n  /* Grundzeichen button */\n  GRUNDZEICHEN = 'GRUNDZEICHEN',\n  /* Schriftzeichen button */\n  SCHRIFTZEICHENGRUPPE = 'SCHRIFTZEICHENGRUPPE'\n}\n\n/**\n * @internal\n */\nexport interface Zeichenobjekt {\n  readonly zeichen: string;\n  readonly grundzeichen: string;\n  readonly schriftzeichengruppe: Schriftzeichengruppe;\n  readonly name: string;\n  readonly codepoint: string;\n}\n\n/**\n * @internal\n */\nexport interface InputCharData {\n  [key: string]: string[];\n}\n\n/**\n * @internal\n */\nexport interface ZeichenSelection {\n  identifier: string;\n  zeichen: string;\n}\n","import {Injectable} from '@angular/core';\nimport {Schriftzeichengruppe, Zeichenobjekt} from '../model/model';\nimport sonderzeichenliste from '../sonderzeichenliste.json';\nimport {Datentyp} from '../model/datentyp';\n\n/**\n * @internal\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class CharacterService {\n  getCharacters(): Zeichenobjekt[] {\n    return sonderzeichenliste as Zeichenobjekt[];\n  }\n\n  getGrundzeichen(list: Zeichenobjekt[]): string[] {\n    const res = [...new Set(list.map((item) => (item.grundzeichen === '' ? '*' : item.grundzeichen)))];\n\n    // Put * to the first position if present\n    const specialPos = res.indexOf('*');\n    if (specialPos > 0) {\n      res.splice(specialPos, 1);\n      res.unshift('*');\n    }\n    return res;\n  }\n\n  getSchriftzeichenGruppen(list: Zeichenobjekt[]): Schriftzeichengruppe[] {\n    const res: Schriftzeichengruppe[] = [];\n    for (const char of list) {\n      if (!res.includes(char.schriftzeichengruppe)) {\n        res.push(char.schriftzeichengruppe);\n      }\n    }\n    return res;\n  }\n\n  getCharactersByDataType(datentyp: Datentyp): Zeichenobjekt[] {\n    const allowedGroups = this.getGroupsByDataType(datentyp);\n    return this.getCharacters().filter((z) => allowedGroups.includes(z.schriftzeichengruppe));\n  }\n\n  getGroupsByDataType(dataTyp: Datentyp): Schriftzeichengruppe[] {\n    switch (dataTyp) {\n      case Datentyp.DATENTYP_A:\n        return [Schriftzeichengruppe.LATEIN, Schriftzeichengruppe.N1];\n      case Datentyp.DATENTYP_B:\n        return [Schriftzeichengruppe.LATEIN, Schriftzeichengruppe.N1, Schriftzeichengruppe.N2];\n      case Datentyp.DATENTYP_C:\n        return [\n          Schriftzeichengruppe.LATEIN,\n          Schriftzeichengruppe.N1,\n          Schriftzeichengruppe.N2,\n          Schriftzeichengruppe.N3,\n          Schriftzeichengruppe.N4\n        ];\n      case Datentyp.DATENTYP_D:\n        return [\n          Schriftzeichengruppe.LATEIN,\n          Schriftzeichengruppe.N1,\n          Schriftzeichengruppe.N2,\n          Schriftzeichengruppe.N3,\n          Schriftzeichengruppe.E1,\n          Schriftzeichengruppe.GRIECHISCH\n        ];\n      default:\n        return [\n          Schriftzeichengruppe.LATEIN,\n          Schriftzeichengruppe.N1,\n          Schriftzeichengruppe.N2,\n          Schriftzeichengruppe.N3,\n          Schriftzeichengruppe.N4,\n          Schriftzeichengruppe.E1,\n          Schriftzeichengruppe.GRIECHISCH,\n          Schriftzeichengruppe.KYRILLISCH\n        ];\n    }\n  }\n\n  filterByGrundzeichen(list: Zeichenobjekt[], grundzeichen?: string): Zeichenobjekt[] {\n    return list.filter((z) => (z.grundzeichen === '' ? '*' : z.grundzeichen) === grundzeichen);\n  }\n\n  filterBySchriftzeichenGruppe(list: Zeichenobjekt[], schriftzeichenGruppe?: Schriftzeichengruppe): Zeichenobjekt[] {\n    return list.filter((z) => z.schriftzeichengruppe === schriftzeichenGruppe);\n  }\n}\n","import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from '@angular/common'; // Import CommonModule for common directives\nimport {ControlValueAccessor, FormsModule} from '@angular/forms'; // Import FormsModule if you're using template-driven forms\nimport {InputCharData} from '../../model/model';\nimport {SelectButtonModule} from 'primeng/selectbutton';\nimport {AccordionModule} from 'primeng/accordion';\n\n@Component({\n  standalone: true,\n  selector: 'isy-multi-select-button',\n  templateUrl: './multi-select-button.component.html',\n  styleUrls: ['./multi-select-button.component.scss'],\n  imports: [CommonModule, FormsModule, AccordionModule, SelectButtonModule]\n})\nexport class MultiSelectButtonComponent implements OnChanges, ControlValueAccessor {\n  /**\n   * Header title of select all button\n   * @internal\n   */\n  @Input() allButtonOptionsLabel: string = '';\n\n  /**\n   * The array who stores an array with every data who must be displayed.\n   * @internal\n   */\n  @Input() dataToDisplay: InputCharData = {};\n\n  @Input() disabled = false;\n\n  /**\n   * Current select button value\n   * @internal\n   */\n  @Input() value: {group: string; value: string} | undefined;\n\n  @Output() valueChange = new EventEmitter<{group: string; value: string} | undefined>();\n\n  models: {[key: string]: string} = {};\n\n  allOptions = [{label: this.allButtonOptionsLabel}];\n\n  allOptionsModel: {label: string} | undefined = this.allOptions[0];\n\n  activeIndex: string | number | string[] | number[] = '';\n\n  /**\n   * Lifecycle hook that is called when any data-bound property of the component changes.\n   * @param changes - An object containing the changed properties and their current and previous values.\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.allButtonOptionsLabel) {\n      this.allOptions[0].label = this.allButtonOptionsLabel;\n    }\n  }\n\n  /**\n   * Triggers an update of the selected group and emits the updated value.\n   * @param group - The selected group.\n   */\n  triggerUpdate(group: string | undefined): void {\n    this.writeValue(group ? {group: group, value: this.models[group]} : undefined);\n    this.valueChange.emit(this.value);\n    this.activeIndex = group ? this.activeIndex : [];\n  }\n\n  /**\n   * Writes a new value to the multi-select button component.\n   * @param obj - The new value to be set. It should be an object with `group` and `value` properties.\n   */\n  writeValue(obj: {group: string; value: string} | undefined): void {\n    this.value = obj;\n    this.models = Object.keys(this.models).reduce<{[key: string]: string}>((acc, key) => {\n      acc[key] = key === obj?.group ? obj.value : '';\n      return acc;\n    }, {});\n    this.allOptionsModel = obj ? undefined : this.allOptions[0];\n  }\n\n  /**\n   * Registers a callback function that will be called when the value of the multi-select button changes.\n   * @param fn - The callback function to be registered.\n   */\n  registerOnChange(fn: unknown): void {\n    this.onChange = fn as () => unknown;\n  }\n\n  /**\n   * Registers a callback function that should be called when the control receives a \"blur\" event.\n   * This is used by Angular forms to update the control's \"touched\" state.\n   * @param fn - The callback function to be registered.\n   */\n  registerOnTouched(fn: unknown): void {\n    this.onTouched = fn as () => unknown;\n  }\n\n  /**\n   * Sets the disabled state of the component.\n   * @param isDisabled - A boolean value indicating whether the component should be disabled or not.\n   */\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  onChange: (_: unknown) => unknown = () => {};\n\n  onTouched: () => void = () => {};\n}\n","<p-selectbutton\n  styleClass=\"all-selectbutton\"\n  (onChange)=\"triggerUpdate(undefined)\"\n  [(ngModel)]=\"allOptionsModel\"\n  [options]=\"[{label: allButtonOptionsLabel}]\"\n  optionLabel=\"label\"\n/>\n\n<p-accordion [(value)]=\"activeIndex\">\n  @for (item of dataToDisplay | keyvalue; let i = $index; track item.key) {\n    <p-accordion-panel [value]=\"item.key\">\n      <p-accordion-header>{{ item.key }}</p-accordion-header>\n      <p-accordion-content>\n        <p-selectbutton\n          [disabled]=\"disabled\"\n          [options]=\"item.value\"\n          [(ngModel)]=\"models[item.key]\"\n          (onChange)=\"triggerUpdate(item.key)\"\n          class=\"charset-selectbutton charset-selectbutton--{{ i }}\"\n        />\n      </p-accordion-content>\n    </p-accordion-panel>\n  }\n</p-accordion>\n","import {Component, Input} from '@angular/core';\nimport {Zeichenobjekt} from '../../model/model';\n\n/**\n * Displays a character in sans and serif style.\n * @internal\n */\n@Component({\n  selector: 'isy-input-char-preview',\n  templateUrl: './input-char-preview.component.html',\n  styleUrls: ['./input-char-preview.component.scss']\n})\nexport class InputCharPreviewComponent {\n  @Input() zeichenObjekt?: Zeichenobjekt;\n}\n","<div id=\"letters-preview\" class=\"flex\">\n  <p id=\"serif-letter\" class=\"flex-1 text-center m-0 letter\">{{ zeichenObjekt?.zeichen }}</p>\n  <p id=\"sans-letter\" class=\"flex-1 text-center m-0 letter\">{{ zeichenObjekt?.zeichen }}</p>\n</div>\n\n<div id=\"letter-information-preview\">\n  <p id=\"description\" class=\"font-bold border-round m-0 letters-spacing\">{{ zeichenObjekt?.name }}</p>\n  <p id=\"codepoint\" class=\"font-bold border-round m-0\">{{ zeichenObjekt?.codepoint }}</p>\n</div>\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport {InputCharData, Schriftzeichengruppe, Zeichenobjekt} from '../../model/model';\nimport {WidgetsConfigService} from '../../../i18n/widgets-config.service';\nimport {CharacterService} from '../../services/character.service';\nimport {ButtonModule} from 'primeng/button';\nimport {SelectButtonModule} from 'primeng/selectbutton';\nimport {AccordionModule} from 'primeng/accordion';\nimport {MultiSelectButtonComponent} from '../multi-select-button/multi-select-button.component';\nimport {FormsModule} from '@angular/forms';\nimport {InputCharPreviewComponent} from '../input-char-preview/input-char-preview.component';\n\n/**\n * @internal\n */\n@Component({\n  standalone: true,\n  selector: 'isy-input-char-dialog',\n  templateUrl: './input-char-dialog.component.html',\n  styleUrls: ['./input-char-dialog.component.scss'],\n  imports: [\n    ButtonModule,\n    SelectButtonModule,\n    AccordionModule,\n    FormsModule,\n    InputCharPreviewComponent,\n    MultiSelectButtonComponent\n  ]\n})\nexport class InputCharDialogComponent implements OnChanges, AfterViewInit, OnDestroy {\n  /**\n   * Emits a character chosen to insert by the user.\n   */\n  @Output() insertCharacter = new EventEmitter<string>();\n\n  /**\n   * All characters the dialog should display.\n   */\n  @Input() charList: Zeichenobjekt[] = [];\n\n  /**\n   * The currently displayed characters.\n   * @internal\n   */\n  displayedCharacters: Zeichenobjekt[] = [];\n\n  /**\n   * The array who stores all the grundzeichen.\n   * @internal\n   */\n  grundZeichenListe: string[] = [];\n\n  /**\n   * The array who stores all the Schriftzeichen.\n   * @internal\n   */\n  schriftZeichenGruppen: Schriftzeichengruppe[] = [];\n\n  /**\n   * Stores the current selected Zeichenobjekt.\n   * @internal\n   */\n  selectedZeichenObjekt?: Zeichenobjekt;\n\n  /**\n   * Includes the displaying data for the left side of the view\n   * @internal\n   */\n  leftViewData: InputCharData = {};\n\n  /**\n   * Header of all select button\n   * @internal\n   */\n  allButtonHeader!: string;\n\n  /**\n   * The MutationObserver used to observe changes in the DOM.\n   */\n  private mutationObserver?: MutationObserver;\n\n  /**\n   * A service used to translate labels within the widgets library.\n   */\n  configService = inject(WidgetsConfigService);\n\n  private readonly charService = inject(CharacterService);\n\n  private readonly elementRef = inject(ElementRef);\n\n  ngAfterViewInit(): void {\n    // Observe changes in the DOM using MutationObserver\n    this.mutationObserver = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        if (mutation.target.textContent) {\n          this.initSelectButtonsData();\n        }\n      });\n    });\n\n    // Start observing the target element for attribute changes\n    this.mutationObserver.observe(this.elementRef.nativeElement as HTMLElement, {\n      characterData: true,\n      subtree: true\n    });\n  }\n\n  ngOnDestroy(): void {\n    // Disconnect the MutationObserver to avoid memory leaks\n    if (this.mutationObserver) {\n      this.mutationObserver.disconnect();\n    }\n  }\n\n  /**\n   * Fire on input changes\n   * @internal\n   */\n  ngOnChanges(): void {\n    this.setupCharPicker();\n  }\n\n  /**\n   * Fired on user zeichen selection\n   * @param selected Incoming event\n   */\n  onSelection(selected: {group: string; value: string} | undefined): void {\n    switch (selected?.group) {\n      case this.getTranslation('inputChar.headerBaseChars'): {\n        this.onGrundzeichenSelection(selected.value);\n        break;\n      }\n      case this.getTranslation('inputChar.headerGroups'): {\n        this.onSchriftzeichenGruppeSelection(selected.value as Schriftzeichengruppe);\n        break;\n      }\n      default: {\n        this.onAllSelection();\n        break;\n      }\n    }\n  }\n\n  /**\n   * Inits the select button view data\n   * @internal\n   */\n  initSelectButtonsData(): void {\n    this.leftViewData = {\n      [this.getTranslation('inputChar.headerBaseChars')]: this.grundZeichenListe,\n      [this.getTranslation('inputChar.headerGroups')]: this.schriftZeichenGruppen\n    };\n  }\n\n  /**\n   * Setting up the characters list who must be displayed.\n   * @internal\n   */\n  resetDisplayedCharacters(): void {\n    this.displayedCharacters = this.charList;\n    this.selectFirstEntry();\n  }\n\n  /**\n   * Is fired when the all button get clicked\n   * @internal\n   */\n  onAllSelection(): void {\n    this.resetDisplayedCharacters();\n  }\n\n  /**\n   * Is fired when a base get selected\n   * @param grundzeichen From the user selected grundzeichen\n   * @internal\n   */\n  onGrundzeichenSelection(grundzeichen?: string): void {\n    this.displayedCharacters = this.charService.filterByGrundzeichen(this.charList, grundzeichen);\n    this.selectFirstEntry();\n  }\n\n  /**\n   * Is fired when a base get selected\n   * @param schriftzeichenGruppe From the user selected schriftzeichengruppe\n   * @internal\n   */\n  onSchriftzeichenGruppeSelection(schriftzeichenGruppe?: Schriftzeichengruppe): void {\n    this.displayedCharacters = this.charService.filterBySchriftzeichenGruppe(this.charList, schriftzeichenGruppe);\n    this.selectFirstEntry();\n  }\n\n  /**\n   * Is selecting the first zeichenobjekt inside the current list\n   * @internal\n   */\n  private selectFirstEntry(): void {\n    this.selectedZeichenObjekt = this.displayedCharacters[0];\n  }\n\n  /**\n   * Initialize the char picker with it's Grundzeichen, Schriftzeichengruppen and initial state.\n   * @internal\n   */\n  setupCharPicker(): void {\n    this.grundZeichenListe = this.getAvailableGrundzeichen();\n    this.schriftZeichenGruppen = this.getAvailableSchriftzeichenGruppen();\n    this.initSelectButtonsData();\n    this.resetDisplayedCharacters();\n  }\n\n  /**\n   * Calculates an array of all different Schriftzeichengruppen within @{link allCharacters}.\n   * @returns An array containing all different Schriftzeichengruppen.\n   */\n  private getAvailableSchriftzeichenGruppen(): Schriftzeichengruppe[] {\n    return this.charService.getSchriftzeichenGruppen(this.charList);\n  }\n\n  /**\n   * Calculates an array of all different Grundzeichen within @{link allCharacters}.\n   * Empty Grundzeichen is transformed to \"*\".\n   * @returns An array containing all different Grundzeichen.\n   */\n  private getAvailableGrundzeichen(): string[] {\n    return this.charService.getGrundzeichen(this.charList);\n  }\n\n  /**\n   * Emits the selected zeichenobjekt\n   * @internal\n   */\n  insertSelectedZeichen(): void {\n    this.insertCharacter.emit(this.selectedZeichenObjekt!.zeichen);\n  }\n\n  /**\n   * Get translated text\n   * @param path to the translated text\n   * @returns translated text\n   */\n  getTranslation(path: string): string {\n    return this.configService.getTranslation(path) as string;\n  }\n}\n","<div class=\"split left-panel-side\">\n  <isy-multi-select-button\n    (valueChange)=\"onSelection($event)\"\n    [dataToDisplay]=\"leftViewData\"\n    allButtonOptionsLabel=\"{{ configService.getTranslation('inputChar.headerAllCharacters') }}\"\n  ></isy-multi-select-button>\n</div>\n\n<div class=\"split right-panel-side\">\n  <p-selectbutton\n    [options]=\"displayedCharacters\"\n    [optionLabel]=\"'zeichen'\"\n    [(ngModel)]=\"selectedZeichenObjekt\"\n    class=\"flex-grow-1 overflow-y-scroll character-selectbutton\"\n  />\n  <div class=\"lower-right-panel\">\n    @if (selectedZeichenObjekt) {\n      <isy-input-char-preview [zeichenObjekt]=\"selectedZeichenObjekt\" class=\"flex-grow-1\"></isy-input-char-preview>\n    }\n\n    <button\n      type=\"button\"\n      pRipple\n      pButton\n      [disabled]=\"!selectedZeichenObjekt\"\n      class=\"flex-shrink-0 font-bold\"\n      (click)=\"insertSelectedZeichen()\"\n    >\n      {{ configService.getTranslation('inputChar.insert') }}\n    </button>\n  </div>\n</div>\n","import {Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, ViewChild} from '@angular/core';\nimport {Datentyp} from '../../model/datentyp';\nimport {CharacterService} from '../../services/character.service';\nimport {Zeichenobjekt} from '../../model/model';\nimport {WidgetsConfigService} from '../../../i18n/widgets-config.service';\nimport {InputCharDialogComponent} from '../input-char-dialog/input-char-dialog.component';\nimport {DialogModule} from 'primeng/dialog';\nimport {ButtonModule} from 'primeng/button';\n\n@Component({\n  standalone: true,\n  selector: 'isy-input-char',\n  templateUrl: './input-char.component.html',\n  styleUrls: ['./input-char.component.scss'],\n  imports: [InputCharDialogComponent, DialogModule, ButtonModule],\n  providers: [CharacterService]\n})\nexport class InputCharComponent implements OnChanges {\n  /**\n   * The width of the dialog.\n   */\n  @Input() width = '740px';\n\n  /**\n   * The height of the dialog.\n   */\n  @Input() height = '460px';\n\n  /**\n   * The current value\n   */\n  @Output() insertCharacter = new EventEmitter<string>();\n\n  /**\n   * Determines which set of characters (datatype) according to DIN 91379 to show\n   */\n  @Input() datentyp: Datentyp = Datentyp.DATENTYP_C;\n\n  /**\n   * A title to show\n   */\n  @Input() header?: string;\n\n  /**\n   * Determines whether the button is outlined\n   */\n  @Input() outlinedInputCharButton: boolean = false;\n\n  /**\n   * Determines whether the char picker can be closed\n   */\n  @Input() closable: boolean = true;\n\n  /**\n   * Determines whether the char picker can be repositioned manually\n   */\n  @Input() draggable: boolean = true;\n\n  /**\n   * Determines whether the char picker can be resized manually\n   */\n  @Input() resizable: boolean = false;\n\n  /**\n   * Determines whether the picker closes when clicking outside of it\n   */\n  @Input() dismissableMask: boolean = false;\n\n  /**\n   * Determines whether the picker closes when pressing the ESC key\n   */\n  @Input() closeOnEscape: boolean = true;\n\n  /**\n   * Determines whether the picker is displayed as a modal\n   */\n  @Input() modal: boolean = false;\n\n  /**\n   * Determines whether the input is displayed\n   */\n  @Input() isInputDisabled: boolean = false;\n\n  @ViewChild('openDialogButton') openDialogButton!: ElementRef<HTMLButtonElement>;\n\n  /**\n   * Controls the char picker visibility\n   * @internal\n   */\n  visible: boolean = false;\n\n  /**\n   * All characters available in the selected data type.\n   * @internal\n   */\n  allCharacters: Zeichenobjekt[] = [];\n\n  private readonly charService = inject(CharacterService);\n\n  /**\n   * A service used to translate labels within the widgets library.\n   */\n  configService = inject(WidgetsConfigService);\n\n  ngOnChanges(): void {\n    this.allCharacters = this.charService.getCharactersByDataType(this.datentyp);\n  }\n\n  /**\n   * Toggles the character picker\n   */\n  toggleCharPicker(): void {\n    this.visible = !this.visible;\n  }\n\n  onDialogClose(): void {\n    this.visible = false;\n\n    if (!document.activeElement || document.activeElement === document.body) {\n      this.openDialogButton.nativeElement.focus();\n    }\n  }\n}\n","<button\n  #openDialogButton\n  [attr.aria-label]=\"configService.getTranslation('inputChar.aria.togglePicker')\"\n  class=\"input-char-button\"\n  type=\"button\"\n  pRipple\n  pButton\n  icon=\"pi pi-language\"\n  [outlined]=\"outlinedInputCharButton\"\n  [disabled]=\"isInputDisabled\"\n  (click)=\"toggleCharPicker()\"\n></button>\n\n<p-dialog\n  [header]=\"configService.getTranslation('inputChar.title')\"\n  [(visible)]=\"visible\"\n  [closable]=\"closable\"\n  [closeAriaLabel]=\"configService.getTranslation('inputChar.aria.closePicker')\"\n  [draggable]=\"draggable\"\n  [resizable]=\"resizable\"\n  [dismissableMask]=\"dismissableMask\"\n  [closeOnEscape]=\"closeOnEscape\"\n  [modal]=\"modal\"\n  (onHide)=\"onDialogClose()\"\n  [style]=\"{\n    width: width,\n    height: height\n  }\"\n>\n  <isy-input-char-dialog\n    [charList]=\"allCharacters\"\n    (insertCharacter)=\"insertCharacter.emit($event)\"\n  ></isy-input-char-dialog>\n</p-dialog>\n","import {\n  ComponentRef,\n  Directive,\n  ElementRef,\n  HostListener,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewContainerRef\n} from '@angular/core';\nimport {InputCharComponent} from '../components/input-char/input-char.component';\nimport {Datentyp} from '../model/datentyp';\n\n/**\n * A directive to add to an <input> field to attach a special character picker.\n */\n@Directive({\n  selector: '[isyInputChar]'\n})\nexport class InputCharDirective implements OnInit, OnDestroy {\n  /**\n   * Determines which set of characters (datatype) according to DIN 91379 to show\n   */\n  @Input() datentyp: Datentyp = Datentyp.DATENTYP_C;\n\n  /**\n   * Determines whether the button is outlined\n   */\n  @Input() outlinedInputCharButton: boolean = false;\n\n  /**\n   * Is getting fired on mouse up event\n   * @param event the fired mouse event\n   */\n  @HostListener('mouseup', ['$event'])\n  onMouseUp(event: MouseEvent): void {\n    this.selectionPosition = this.getSelectionPosition(event);\n  }\n\n  /**\n   * Is getting fired on keyboard event\n   * @param event the fired keyboard event\n   */\n  @HostListener('keyup', ['$event'])\n  onKeyUp(event: KeyboardEvent): void {\n    this.selectionPosition = this.getSelectionPosition(event);\n  }\n\n  /**\n   * The current selection position (index) inside the input\n   */\n  selectionPosition: number = 0;\n\n  componentRef!: ComponentRef<InputCharComponent>;\n\n  htmlInputElement: HTMLInputElement;\n\n  private attributeMutationObserver?: MutationObserver;\n\n  private readonly viewContainerRef = inject(ViewContainerRef);\n\n  private readonly element = inject(ElementRef);\n\n  constructor() {\n    this.htmlInputElement = this.element.nativeElement as HTMLInputElement;\n    this.htmlInputElement.style.width = 'calc(100% - 2.875rem)';\n  }\n\n  ngOnInit(): void {\n    this.componentRef = this.viewContainerRef.createComponent(InputCharComponent);\n    this.componentRef.instance.datentyp = this.datentyp!;\n    this.componentRef.instance.outlinedInputCharButton = this.outlinedInputCharButton;\n\n    this.setupInputChar();\n\n    this.componentRef.instance.insertCharacter.subscribe((zeichen) => {\n      this.htmlInputElement.value = this.buildInputValue(this.htmlInputElement.value, zeichen);\n      this.setNextInputPosition(zeichen.length);\n      this.htmlInputElement.dispatchEvent(new Event('input'));\n    });\n  }\n\n  ngOnDestroy(): void {\n    // Disconnect the MutationObserver to avoid memory leaks\n    this.attributeMutationObserver?.disconnect();\n  }\n\n  /**\n   * Sets up the input character directive.\n   * This method updates the input disabled state and observes changes in the DOM using MutationObserver.\n   */\n  setupInputChar(): void {\n    this.updateInputDisabledState();\n\n    // Observe changes in the DOM using MutationObserver\n    this.attributeMutationObserver = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        const input = mutation.target as HTMLInputElement;\n\n        if (mutation) {\n          this.handleDisabledReadonlyChange(input, mutation.attributeName);\n          this.handleDatentypChange(input, mutation.attributeName);\n        }\n      });\n    });\n\n    // Start observing the target element for attribute changes\n    this.attributeMutationObserver.observe(this.htmlInputElement, {\n      attributes: true\n    });\n  }\n\n  /**\n   * Updates the disabled state of the input element.\n   */\n  updateInputDisabledState(): void {\n    const {disabled, readOnly} = this.htmlInputElement;\n    this.componentRef.setInput('isInputDisabled', disabled || readOnly);\n  }\n\n  /**\n   * Handles the change in disabled or readonly attribute of the input element.\n   * @param input - The HTMLInputElement to handle.\n   * @param attributeName - The name of the attribute that changed (disabled or readonly).\n   */\n  handleDisabledReadonlyChange(input: HTMLInputElement, attributeName: string | undefined | null): void {\n    if (attributeName === 'disabled' || attributeName === 'readonly') {\n      const isDisabledOrReadOnly = input.disabled || input.readOnly;\n      this.componentRef.instance.visible = false;\n      this.componentRef.setInput('isInputDisabled', isDisabledOrReadOnly);\n    }\n  }\n\n  /**\n   * Handles the change of the datentyp attribute for the input element.\n   * If the attributeName is 'ng-reflect-datentyp', it sets the 'datentyp' input of the component.\n   * @param input - The HTMLInputElement that triggered the change event.\n   * @param attributeName - The name of the attribute that changed.\n   */\n  handleDatentypChange(input: HTMLInputElement, attributeName: string | undefined | null): void {\n    if (attributeName === 'ng-reflect-datentyp') {\n      this.componentRef.setInput('datentyp', input.getAttribute('ng-reflect-datentyp'));\n    }\n  }\n\n  /**\n   * Retrieves the position of the current selection within an input element.\n   * @param event - The MouseEvent or KeyboardEvent that triggered the selection.\n   * @returns The position of the selection within the input element.\n   */\n  getSelectionPosition(event: MouseEvent | KeyboardEvent): number {\n    return (event.target as HTMLInputElement).selectionStart!;\n  }\n\n  /**\n   * Is setting the next input mouse position\n   * @param charLength used to determine the exact next input mouse position, since there are characters longer than one position\n   */\n  setNextInputPosition(charLength: number): void {\n    this.selectionPosition += charLength;\n  }\n\n  /**\n   * Builds the input value by inserting a character at the current selection position.\n   * @param value - The original input value.\n   * @param zeichen - The character to be inserted.\n   * @returns The updated input value with the character inserted at the current selection position.\n   */\n  buildInputValue(value: string, zeichen: string): string {\n    const beforeZeichen = value.substring(0, this.selectionPosition);\n    const afterZeichen = value.substring(this.selectionPosition);\n    return `${beforeZeichen}${zeichen}${afterZeichen}`;\n  }\n}\n","import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {Injectable} from '@angular/core';\n\n/**\n * A {@link HttpInterceptor} that appends the x-correlations-id header to each request.\n *\n * The correlation ID must always be logged so that the log entries can be assigned to individual calls and tracked\n * across the components of the application landscape. (See <a href=\"https://isyfact.github.io/isyfact-standards-doku/latest/isy-logging/konzept/master.html\">\n * IsyFact documentation</a>)\n *\n * For generating the id the <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API\">crypto api</a>\n * of the webbrowsers is used.\n */\n@Injectable()\nexport class CorrelationIdHttpInterceptor implements HttpInterceptor {\n  /**\n   * Appends a random x-correlation-id as header to the given request\n   * @param req The request to append to\n   * @param next The HttpHandler to pass the request to\n   * @returns The result Observable\n   */\n  intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    const correlationId = crypto.randomUUID();\n    const requestWithCorrelationIdHeader = req.clone({\n      setHeaders: {\n        'x-correlation-id': correlationId\n      }\n    });\n\n    return next.handle(requestWithCorrelationIdHeader);\n  }\n}\n","import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {OpenTraceHeaders} from './open-tracing-headers';\n\n/**\n * An abstract {@link HttpInterceptor} that adds http headers depending on the concrete OpenTracing implementation.\n *\n * The <a href=\"https://opentracing.io/\">OpenTracing Standard</a> is currently not supported by the IsyFact software\n * factory and offers an alternative for the concept of the correlationId\n * (See <a href=\"https://isyfact.github.io/isyfact-standards-doku/latest/isy-logging/konzept/master.html\"> IsyFact documentation</a>)\n *\n * In difference to the correlationId, the OpenTracing standard uses a trace- and a spanId.\n * <ul>\n *   <li><b>traceId:</b> This is an id that is assigned to a single request, job, or action. Something like each unique user initiated web request will have its own traceId.</li>\n *   <li><b>spanId:</b> Tracks a unit of work. Think of a request that consists of multiple steps. Each step could have its own spanId and be tracked individually.</li>\n * </ul>\n *\n *\n * For generating the id the <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API\">crypto api</a>\n * of the webbrowsers is used.\n */\nexport abstract class OpenTracingHttpInterceptor implements HttpInterceptor {\n  protected readonly traceHeaderName: string;\n  protected readonly spanHeaderName: string;\n\n  /**\n   * Constructor that configures an interceptor for using OpenTracing headers.\n   * @param traceHeader The header to append as tracing header\n   * @param spanHeader The header to append as span header\n   */\n  protected constructor(traceHeader: OpenTraceHeaders, spanHeader: OpenTraceHeaders) {\n    this.traceHeaderName = traceHeader;\n    this.spanHeaderName = spanHeader;\n  }\n\n  /**\n   * Appends a random traceId and spanId as header to the given request\n   * @param req The request to append to\n   * @param next The HttpHandler to pass the request to\n   * @returns The result Observable\n   */\n  intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    const traceId = crypto.randomUUID();\n    const spanId = crypto.randomUUID();\n\n    const requestWithCorrelationIdHeader = req.clone({\n      setHeaders: {\n        [this.traceHeaderName]: traceId,\n        [this.spanHeaderName]: spanId\n      }\n    });\n\n    return next.handle(requestWithCorrelationIdHeader);\n  }\n}\n","/**\n * List of supported tracing headers.\n */\nexport enum OpenTraceHeaders {\n  /**\n   * Tracing headers for the <a href=\"https://zipkin.io/pages/instrumenting.html\">Zipkin</a> implementation of the\n   * OpenTracing standard.\n   */\n  ZIPKIN_TRACE_ID = 'X-B3-TraceId',\n  ZIPKIN_SPAN_ID = 'X-B3-SpanId'\n}\n","import {OpenTracingHttpInterceptor} from './open-tracing-http-interceptor';\nimport {Injectable} from '@angular/core';\nimport {OpenTraceHeaders} from './open-tracing-headers';\n\n/**\n * Implements the {@link OpenTracingHttpInterceptor} using the <a href=\"https://zipkin.io/\">Zipkin</a> implementation\n * of the OpenTracing standard.\n */\n@Injectable()\nexport class ZipkinOpenTracingHttpInterceptor extends OpenTracingHttpInterceptor {\n  /**\n   * Constructor that configures an {@link OpenTracingHttpInterceptor} to use ZIPKIN standard\n   */\n  constructor() {\n    super(OpenTraceHeaders.ZIPKIN_TRACE_ID, OpenTraceHeaders.ZIPKIN_SPAN_ID);\n  }\n}\n","import {Component, inject, Input} from '@angular/core';\nimport {ToolbarModule} from 'primeng/toolbar';\nimport {ButtonModule} from 'primeng/button';\nimport {Router, RouterModule} from '@angular/router';\n\n/**\n * Represents a toolbar component that can be used to insert a toolbar at the top of the page.\n */\n@Component({\n  standalone: true,\n  selector: 'isy-seiten-toolbar',\n  templateUrl: './seitentoolbar.component.html',\n  styleUrls: ['./seitentoolbar.component.scss'],\n  imports: [ToolbarModule, ButtonModule, RouterModule]\n})\nexport class SeitentoolbarComponent {\n  /**\n   * Determines whether to show or hide the Seitentoolbar, a sticky toolbar at the top of the screen.\n   */\n  @Input() showSidebar: boolean = false;\n\n  /**\n   * Label for the home button.\n   */\n  @Input() sidebarHomeButtonLabel?: string;\n\n  /**\n   * AriaLabel for the home button.\n   */\n  @Input() sidebarHomeButtonAriaLabel?: string;\n\n  /**\n   * Route for the home button.\n   */\n  @Input() sidebarHomeRoute?: string = '/';\n\n  private readonly router = inject(Router);\n\n  /**\n   * Method to navigate to the homeRoute.\n   * @returns A promise that resolves when the navigation is complete.\n   */\n  async navigateHome(): Promise<void> {\n    await this.router.navigate([this.sidebarHomeRoute]);\n  }\n}\n","@if (showSidebar) {\n  <p-toolbar>\n    <div class=\"p-toolbar-left\">\n      <p-button\n        [link]=\"true\"\n        label=\"{{ sidebarHomeButtonLabel }}\"\n        ariaLabel=\"{{ sidebarHomeButtonAriaLabel }}\"\n        icon=\"pi pi-arrow-circle-left\"\n        (onClick)=\"navigateHome()\"\n      />\n    </div>\n    <div class=\"p-toolbar-middle\">\n      <ng-content select=\"[middle]\"></ng-content>\n    </div>\n    <div class=\"p-toolbar-right\">\n      <ng-content select=\"[right]\"></ng-content>\n    </div>\n  </p-toolbar>\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {AbstractControl, FormControl} from '@angular/forms';\n\n@Pipe({\n  name: 'formControl'\n})\nexport class FormControlPipe implements PipeTransform {\n  /*\n   * Transforms the input value (AbstractControl) into a FormControl.\n   *\n   * @param value An instance of AbstractControl, which is the parent type for form controls in Angular.\n   * @return The input value cast as a FormControl, allowing access to FormControl properties and methods.\n   */\n  transform(value: AbstractControl): FormControl {\n    return value as FormControl;\n  }\n}\n","type incompleteDateGermanFormats = RegExp[];\n\nexport const INCOMPLETE_DATE_GERMAN_FORMATS_REGEX: incompleteDateGermanFormats = [\n  /^x{2}\\.((x{2}\\.(\\d{4}|x{4}))|((?!00)\\d{2}\\.\\d{4}))$/,\n  /^0{2}\\.((0{2}\\.(\\d{4}|0{4}))|((?!xx)\\d{2}\\.\\d{4}))$/,\n  /^\\d{2}\\.(?!00)\\d{2}\\.\\d{4}$/\n];\n\ntype incompleteDateFormats = RegExp[];\n\nexport const INCOMPLETE_DATE_FORMATS_REGEX: incompleteDateFormats = [\n  /^((\\d{4}-(?!00)\\d{2})|((\\d{4}|x{4})-x{2}))-x{2}$/,\n  /^((\\d{4}-(?!xx)\\d{2})|((\\d{4}|0{4})-0{2}))-0{2}$/,\n  /^\\d{4}-(?!00)\\d{2}-\\d{2}$/\n];\n","export const DATE_FORMAT_ERROR =\n  'InvalidPipeArgument: Unspecified date format is invalid for the conversion with pipe IncompleteDatePipe';\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {INCOMPLETE_DATE_FORMATS_REGEX, INCOMPLETE_DATE_GERMAN_FORMATS_REGEX} from './data/regex';\nimport {DATE_FORMAT_ERROR} from './data/errors';\n\n/**\n * Converts an unspecified date string from the format YYYY-MM-DD to the German date format DD.MM.YYYY.\n * Example: '2024-00-00' becomes '00.00.2024' or 2024-xx-xx becomes xx.xx.2024.\n * If 'xx' or '00' are not present, e.g. '2024-01-01' becomes '01.01.2024'.\n * An error is thrown if the input does not match YYYY-MM-DD or DD.MM.YYYY.\n */\n@Pipe({\n  name: 'incompleteDatePipe'\n})\nexport class IncompleteDatePipe implements PipeTransform {\n  /**\n   * Converts an unspecified date string to the German format DD.MM.YYYY.\n   * Throws an error for invalid date formats.\n   * @param value Date string in YYYY-MM-DD or DD.MM.YYYY format.\n   * @returns Date string in DD.MM.YYYY format.\n   */\n  transform(value: string | null | undefined): string {\n    if (!value || value === '') return '';\n\n    const valueInLowerCase = value.toLowerCase();\n\n    // Check if the value matches the German date format and return as is if it does\n    if (INCOMPLETE_DATE_GERMAN_FORMATS_REGEX.some((format) => format.test(valueInLowerCase))) return valueInLowerCase;\n\n    // Check if the value matches a specified date format, throw an error if it doesn't\n    if (!INCOMPLETE_DATE_FORMATS_REGEX.some((format) => format.test(valueInLowerCase)))\n      throw new Error(DATE_FORMAT_ERROR);\n\n    const [year, month, day] = valueInLowerCase.split('-');\n\n    return this.formatDate(year, month, day);\n  }\n\n  /**\n   * Private helper method to format the date components into a day.month.year format\n   * @param year The year string\n   * @param month The month string\n   * @param day The day string\n   * @returns The date string in German date format\n   */\n  private formatDate(year: string, month: string, day: string): string {\n    return [day, month, year].join('.');\n  }\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FormControl, ReactiveFormsModule, Validators} from '@angular/forms';\nimport {IftaLabelModule} from 'primeng/iftalabel';\nimport {MessageModule} from 'primeng/message';\n\n/**\n * A component that wraps form controls and displays validation messages.\n * It requires the usage of reactive forms and supports standalone usage.\n * @example\n * ```html\n * <form [formGroup]=\"myForm\">\n *   <isy-form-wrapper\n *     label=\"Email\"\n *     fieldId=\"email\"\n *     [control]=\"myForm.controls.email| formControl\"\n *     [validationMessages]=\"{\n *       'required': 'Email is required',\n *       'email': 'Please enter a valid email address'\n *     }\">\n *     <input\n *        id=\"email\"\n *        formControlName=\"email\"\n *        class=\"w-full\"\n *        type=\"text\"\n *        pInputText\n *     />\n *   </isy-form-wrapper>\n * </form>\n * ```\n * Ensure you have imported `ReactiveFormsModule` and `MessageModule` in your module:\n * ```typescript\n * import { ReactiveFormsModule, MessageModule } from '@angular/forms';\n * ```\n */\n@Component({\n  standalone: true,\n  selector: 'isy-form-wrapper',\n  templateUrl: './form-wrapper.component.html',\n  styleUrls: ['./form-wrapper.component.scss'],\n  imports: [ReactiveFormsModule, IftaLabelModule, MessageModule]\n})\nexport class FormWrapperComponent implements OnInit {\n  @Input() label!: string;\n  @Input() labelId?: string;\n  @Input() fieldId!: string;\n  @Input() control!: FormControl;\n  @Input() validationMessages?: {[key: string]: string} = {};\n  @Input() ifta: boolean = false;\n\n  /**\n   * Validates the control input on component initialization.\n   * Throws an error if control is missing or not an instance of FormControl.\n   */\n  ngOnInit(): void {\n    if (!this.control || !(this.control instanceof FormControl)) {\n      throw new Error('control Input is required and must be an instance of FormControl');\n    }\n  }\n\n  /**\n   * Computes and returns the appropriate error message.\n   * Iterates over control errors and matches them with custom validation messages.\n   * @returns string | null The error message or null if no errors.\n   */\n  get errorMessage(): string | null {\n    if (this.control.errors && this.validationMessages) {\n      const errors = this.control.errors;\n      for (const errorName in errors) {\n        if (errors.hasOwnProperty(errorName)) {\n          return this.validationMessages[errorName];\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns the CSS class for the label based on the current state.\n   * @returns The CSS class for the label.\n   */\n  get labelOptionClass(): string {\n    return this.ifta ? ' ifta' : ' static-label';\n  }\n\n  /**\n   * Returns the CSS class for the label based on the value of the control.\n   * If the control value is truthy, it returns 'label--filled',\n   * otherwise it returns ''.\n   * @returns The CSS class for the label.\n   */\n  get labelFilledClass(): string {\n    return this.control.value && this.ifta ? ' label--filled' : '';\n  }\n\n  /**\n   * Retrieves the label for the form wrapper component.\n   * If the label is required, it appends an asterisk (*) to the label.\n   * @returns The label for the form wrapper component.\n   */\n  getLabel(): string {\n    return this.isRequired() ? `${this.label} *` : this.label;\n  }\n\n  /**\n   * Determines whether the error message should be shown.\n   * The error message should be shown if:\n   * - The errorMessage is not null or empty\n   * - The control is invalid\n   * - The control has been touched\n   * @returns A boolean value indicating whether the error message should be shown.\n   */\n  shouldShowError(): boolean {\n    return (\n      this.errorMessage !== null &&\n      this.errorMessage !== '' &&\n      this.control.invalid &&\n      (this.control.touched || this.control.dirty)\n    );\n  }\n\n  /**\n   * Computes and returns the information about the required state\n   * @returns the required state\n   */\n  isRequired(): boolean {\n    return this.control.hasValidator(Validators.required);\n  }\n}\n","<div [class]=\"'flex flex-column gap-2' + labelOptionClass\">\n  <label [attr.id]=\"labelId ? labelId : undefined\" [class]=\"'label' + labelFilledClass\" [for]=\"fieldId\">{{\n    getLabel()\n  }}</label>\n  <div class=\"flex-container\"><ng-content></ng-content></div>\n  @if (shouldShowError()) {\n    <p-message styleClass=\"p-error\" severity=\"error\" variant=\"simple\" size=\"large\">{{ errorMessage }}</p-message>\n  }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\nimport {providePrimeNG} from 'primeng/config';\nimport {Preset} from '@primeuix/themes/types';\nimport Nora from '@primeuix/themes/nora';\n\n/**\n * Provides the IsyFact theme for PrimeNG components.\n * @param themePreset The theme preset to use. Default is Nora.\n * @returns An EnvironmentProviders object with the theme configuration.\n */\nexport function provideIsyFactTheme(themePreset: Preset<any> = Nora): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    providePrimeNG({\n      theme: {\n        preset: themePreset,\n        options: {\n          darkModeSelector: false,\n          cssLayer: {\n            name: 'primeng',\n            order: 'primeng, isyfact-theme'\n          }\n        }\n      }\n    })\n  ]);\n}\n","/*\n * Public API Surface of isy-angular-widgets\n */\n\nexport * from './lib/api/public-api';\nexport * from './lib/hauptfenster/public-api';\nexport * from './lib/security/public-api';\nexport * from './lib/incomplete-date/public-api';\nexport * from './lib/wizard/public-api';\nexport * from './lib/input-char/public-api';\nexport * from './lib/validation/public-api';\nexport * from './lib/http/public-api';\nexport * from './lib/i18n/public-api';\nexport * from './lib/seitentoolbar/public-api';\nexport * from './lib/pipes/public-api';\nexport * from './lib/form-wrapper/public-api';\nexport * from './lib/core/public-api';\nexport * from './lib/skip-links/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA;;AAEG;MAEmB,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAf,eAAe,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC;;;ACzBD;;AAEG;;ACEH;;AAEG;MAIU,oBAAoB,CAAA;AACvB,IAAA,WAAW,GAAuB;AACxC,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,KAAK,EAAE;AACR,SAAA;AACD,QAAA,SAAS,EAAE;AACT,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,MAAM,EAAE;AACT,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,UAAU,EAAE,+BAA+B;AAC3C,YAAA,kBAAkB,EAAE,6CAA6C;AACjE,YAAA,MAAM,EAAE;AACT;KACF;AAEgB,IAAA,iBAAiB,GAAG,IAAI,OAAO,EAAW;AAE3D,IAAA,cAAc,CAAC,IAAY,EAAA;;;AAGzB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAI,CAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,WAAW,CAAW;;AAGtG,IAAA,cAAc,CAAC,KAAyB,EAAA;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,EAAC;QAClD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;;uGA9BpC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;;;;;;;;;AAUG;MAMU,kBAAkB,CAAA;IACpB,KAAK,GAAiB,EAAE;AACxB,IAAA,SAAS;AAElB;;AAEG;AACH,IAAA,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAE5C,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;QACtC,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAgB;QAExD,IAAI,EAAE,EAAE;AACN,YAAA,EAAE,CAAC,cAAc,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAC,CAAC;YAEvD,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AAChC,gBAAA,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;;YAGnC,EAAE,CAAC,KAAK,EAAE;;aACL;YACL,OAAO,CAAC,IAAI,CACV,CAAA,8BAAA,EAAiC,MAAM,CAAA,+CAAA,EAAkD,MAAM,CAAA,oBAAA,CAAsB,CACtH;;;uGAxBM,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,8HCpB/B,sTAOA,EAAA,MAAA,EAAA,CAAA,qVAAA,CAAA,EAAA,CAAA;;2FDaa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,sTAAA,EAAA,MAAA,EAAA,CAAA,qVAAA,CAAA,EAAA;8BAKjB,KAAK,EAAA,CAAA;sBAAb;gBACQ,SAAS,EAAA,CAAA;sBAAjB;;;AEbH;;;;;;;;;;;;AAYG;MAQU,qBAAqB,CAAA;AAChC;;AAEG;IACM,KAAK,GAAmB,EAAE;AAEnC;;AAEG;AACM,IAAA,QAAQ;AAEjB;;;;AAIG;IACM,eAAe,GAAW,EAAE;AAErC;;;;AAIG;IACM,OAAO,GAAW,EAAE;AAE7B;;;AAGG;AACM,IAAA,KAAK;AAEd;;AAEG;IACM,oBAAoB,GAAY,IAAI;AAE7C;;AAEG;AACM,IAAA,oBAAoB;AAE7B;;AAEG;IACM,mBAAmB,GAAY,KAAK;AAE7C;;AAEG;IACM,uBAAuB,GAAY,KAAK;AAEjD;;AAEG;IACM,oBAAoB,GAAY,IAAI;AAE7C;;AAEG;IACM,wBAAwB,GAAY,KAAK;AAElD;;AAEG;IACM,4BAA4B,GAAY,KAAK;AAEtD;;AAEG;IACM,qBAAqB,GAAW,SAAS;AAElD;;;AAGG;IACM,oBAAoB,GAAG,MAAM;AAEtC;;;AAGG;IACM,wBAAwB,GAAG,MAAM;IAEjC,KAAK,GAAiB,EAAE;AAEvB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAY;AAEpD;;AAEG;AACH,IAAA,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC;uGA1FjC,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ivBC7BlC,ykKAsIA,EAAA,MAAA,EAAA,CAAA,yoBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3GY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,qQAAE,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE/C,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,kBAAkB,EAAA,OAAA,EAGnB,CAAC,YAAY,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,ykKAAA,EAAA,MAAA,EAAA,CAAA,yoBAAA,CAAA,EAAA;8BAMlD,KAAK,EAAA,CAAA;sBAAb;gBAKQ,QAAQ,EAAA,CAAA;sBAAhB;gBAOQ,eAAe,EAAA,CAAA;sBAAvB;gBAOQ,OAAO,EAAA,CAAA;sBAAf;gBAMQ,KAAK,EAAA,CAAA;sBAAb;gBAKQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAKQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAKQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAKQ,uBAAuB,EAAA,CAAA;sBAA/B;gBAKQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAKQ,wBAAwB,EAAA,CAAA;sBAAhC;gBAKQ,4BAA4B,EAAA,CAAA;sBAApC;gBAKQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAMQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAMQ,wBAAwB,EAAA,CAAA;sBAAhC;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAES,WAAW,EAAA,CAAA;sBAApB;;;AE5GH;;AAEG;MAIU,eAAe,CAAA;AAClB,IAAA,KAAK;AACL,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAoB;AACtC,IAAA,UAAU,GAAG,IAAI,GAAG,EAAoB;AAEhD;;;AAGG;AACH,IAAA,QAAQ,CAAC,QAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;;AAG7B;;;AAGG;AACH,IAAA,cAAc,CAAC,cAA8B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;;AAGpE;;;;AAIG;AACH,IAAA,sBAAsB,CAAC,OAAe,EAAA;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;QAE7B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAEjD,OAAO,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;;AAG1E;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,KAA6B,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAEjC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5C,MAAM,SAAS,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;AAEjF,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC;;AAGtB;;;;AAIG;AACH,IAAA,wBAAwB,CAAC,KAAY,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC9B,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;;AAGlB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAChD,IAAI,aAAa,GAAG,KAAK;QAEzB,IAAI,UAAU,EAAE;AACd,YAAA,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;AAGvE,QAAA,OAAO,EAAE,CAAC,aAAa,CAAC;;uGAnEf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;;;;;;;;AASG;MAEU,SAAS,CAAA;AACpB;;AAEG;AACc,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAE1D;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAA6B,EAAA;QACvC,OAAO,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC;;uGAZ9C,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAT,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,cADG,MAAM,EAAA,CAAA;;2FAClB,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACZhC;;;;;AAKG;MAIU,iBAAiB,CAAA;AAC5B;;AAEG;AACc,IAAA,QAAQ,GAAG,MAAM,CAAuB,WAAW,CAAC;AAErE;;AAEG;AACc,IAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEzD;;AAEG;AACc,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAE1D;;;AAGG;IACH,IAAa,YAAY,CAAC,EAAU,EAAA;QAClC,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,EAAE;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;aACvB;YACL,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,CAAC;AAChE,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;;;AAIpC;;;AAGG;AACK,IAAA,iBAAiB,CAAC,YAAqB,EAAA;QAC7C,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;;aAC/C;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;;uGArCnB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;8BAqBc,YAAY,EAAA,CAAA;sBAAxB;;;AChCH;;AAEG;;ACFI,MAAM,qBAAqB,GAAW,6CAA6C;AAEnF,MAAM,sBAAsB,GAAW,+CAA+C;;ACE7F;;AAEG;MAIU,qBAAqB,CAAA;IACf,SAAS,GAAG,GAAG;IACf,SAAS,GAAG,MAAM;IAClB,gBAAgB,GAAG,YAAY;AAEhD;;;;;;;AAOG;IACH,cAAc,CAAC,QAAgB,EAAE,oBAAoB,GAAG,KAAK,EAAE,eAAe,GAAG,KAAK,EAAA;QACpF,IAAI,OAAO,GAAG,QAAQ;AACtB,QAAA,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAE7C,QAAA,IAAI,eAAe,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,gBAAgB;QAE5E,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC;AAChE,QAAA,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAE9C,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC;AAE/F,QAAA,OAAO,OAAO;;AAGhB;;;;;;AAMG;IACK,UAAU,CAAC,IAAY,EAAE,oBAA6B,EAAA;QAC5D,MAAM,iBAAiB,GAAG,CAAC;QAC3B,MAAM,WAAW,GAAG,EAAE;QACtB,IAAI,QAAQ,GAAG,IAAI;AACnB,QAAA,MAAM,oBAAoB,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AAExD,QAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,iBAAiB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACrG,YAAA,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,MAAM,WAAW,GAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpD,gBAAA,MAAM,IAAI,GAAG,WAAW,IAAI,oBAAoB,CAAC,MAAM;gBACvD,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC;gBACrG,QAAQ;AACN,oBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,IAAI;0BAC9B,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,QAAQ;0BAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;;;AAIrC,QAAA,OAAO,QAAQ;;AAGjB;;;;;;AAMG;AACK,IAAA,iBAAiB,CAAC,IAAY,EAAE,eAAe,GAAG,KAAK,EAAA;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/B,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;AAEzC,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,MAAkB,EAAE,OAAe,EAAE,KAAa,KAAI;AACrD,YAAA,IAAI,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;YAEjC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACzC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;;YAG3D,OAAO,EAAC,GAAG,MAAM,EAAE,CAAC,OAAO,GAAG,YAAY,EAAC;AAC7C,SAAC,EACD,EAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAC,CAC/B;AAED,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAEnD,IACE,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI;YACpD,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAExC,YAAA,OAAO,QAAQ,GAAG,UAAU,CAAC,IAAI;QAEnC,IAAI,eAAe,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,gBAAgB;AAEvF,QAAA,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,QAAQ,GAAG,UAAU,CAAC,IAAI;AAEhE,QAAA,OAAO,OAAO;;AAGhB;;;;AAIG;AACK,IAAA,iBAAiB,CAAC,OAAe,EAAA;AACvC,QAAA,OAAO,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;;uGArGvG,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACTM,MAAM,gBAAgB,GAAW,qCAAqC;AAEtE,MAAM,yBAAyB,GAAW,mCAAmC;AAEpF;AACO,MAAM,uBAAuB,GAAG,IAAI,MAAM;AAC/C;AACA,iCAAiC,CAAC,MAAM;IACtC,IAAI;;AAEJ,IAAA,sBAAsB,CAAC,MAAM;IAC7B,IAAI;;AAEJ,IAAA,qBAAqB,CAAC,MAAM;IAC5B,IAAI;;AAEJ,IAAA,iCAAiC,CAAC,MAAM;IACxC,IAAI;;AAEJ,IAAA,sBAAsB,CAAC,MAAM;IAC7B,IAAI;;IAEJ,sBAAsB,CAAC,MAAM,CAChC;AACM,MAAM,gCAAgC,GAAG,IAAI,MAAM;AACxD;AACA,+BAA+B,CAAC,MAAM;IACpC,IAAI;;AAEJ,IAAA,oBAAoB,CAAC,MAAM;IAC3B,IAAI;;AAEJ,IAAA,mBAAmB,CAAC,MAAM;IAC1B,IAAI;;AAEJ,IAAA,+BAA+B,CAAC,MAAM;IACtC,IAAI;;AAEJ,IAAA,oBAAoB,CAAC,MAAM;IAC3B,IAAI;;IAEJ,oBAAoB,CAAC,MAAM,CAC9B;;ACxCD;;;;;;;;;;;AAWG;AACI,MAAM,kBAAkB,GAAuB;AACpD,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE;AACT,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACX,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,Q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YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,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B,oBAAoB,GAAA,EAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}