{"version":3,"file":"bp-space-invaders.mjs","sources":["../../../projects/space-invaders/src/lib/service/game-cookie.service.ts","../../../projects/space-invaders/src/lib/asset/enum/asset-align.enum.ts","../../../projects/space-invaders/src/lib/asset/enum/asset-align-vertical.enum.ts","../../../projects/space-invaders/src/lib/gameboard/gameboard-constants.ts","../../../projects/space-invaders/src/lib/service/game.service.ts","../../../projects/space-invaders/src/lib/aliens/alien-boss-1/alien-boss-1-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien/alien-constants.ts","../../../projects/space-invaders/src/lib/enum/observable-type.enum.ts","../../../projects/space-invaders/src/lib/asset/asset.class.ts","../../../projects/space-invaders/src/lib/aliens/alien/alien.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-boss/alien-boss.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-boss-1/alien-boss-1.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-boss-2/alien-boss-2-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien-boss-2/alien-boss-2.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-boss/test-component/alien-boss.component.ts","../../../projects/space-invaders/src/lib/aliens/alien-boss/test-component/alien-boss.component.html","../../../projects/space-invaders/src/lib/aliens/alien-1/alien-1-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien-1/alien-1.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-2/alien-2-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien-2/alien-2.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-3/alien-3-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien-3/alien-3.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-4/alien-4-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien-4/alien-4.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-5/alien-5-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien-5/alien-5.class.ts","../../../projects/space-invaders/src/lib/aliens/alien-6/alien-6-constants.ts","../../../projects/space-invaders/src/lib/aliens/alien-6/alien-6.class.ts","../../../projects/space-invaders/src/lib/aliens/alien/test-component/alien.component.ts","../../../projects/space-invaders/src/lib/aliens/alien/test-component/alien.component.html","../../../projects/space-invaders/src/lib/bomb/bomb-constants.ts","../../../projects/space-invaders/src/lib/bomb/bomb.class.ts","../../../projects/space-invaders/src/lib/bomb/test-component/bomb.component.ts","../../../projects/space-invaders/src/lib/bomb/test-component/bomb.component.html","../../../projects/space-invaders/src/lib/number/number-constants.ts","../../../projects/space-invaders/src/lib/number/number.class.ts","../../../projects/space-invaders/src/lib/service/text.service.ts","../../../projects/space-invaders/src/lib/service/invasion.service.ts","../../../projects/space-invaders/src/lib/service/moon.service.ts","../../../projects/space-invaders/src/lib/moon-defense/moon-defense-constants.ts","../../../projects/space-invaders/src/lib/moon-defense/moon-defense.class.ts","../../../projects/space-invaders/src/lib/service/moon-defense.service.ts","../../../projects/space-invaders/src/lib/spaceships/spaceship-2/spaceship-2-constants.ts","../../../projects/space-invaders/src/lib/spaceships/spaceship/spaceship-constants.ts","../../../projects/space-invaders/src/lib/spaceships/spaceship/spaceship.class.ts","../../../projects/space-invaders/src/lib/spaceships/spaceship-2/spaceship-2.class.ts","../../../projects/space-invaders/src/lib/service/spaceship.service.ts","../../../projects/space-invaders/src/lib/missile/missile-2/missile-2-constants.ts","../../../projects/space-invaders/src/lib/missile/missile/missile-constants.ts","../../../projects/space-invaders/src/lib/missile/missile/missile.class.ts","../../../projects/space-invaders/src/lib/missile/missile-2/missile-2.class.ts","../../../projects/space-invaders/src/lib/service/projectile.service.ts","../../../projects/space-invaders/src/lib/gameboard/gameboard.component.ts","../../../projects/space-invaders/src/lib/gameboard/gameboard.component.html","../../../projects/space-invaders/src/lib/missile/missile-1/missile-1-constants.ts","../../../projects/space-invaders/src/lib/missile/missile-1/missile-1.class.ts","../../../projects/space-invaders/src/lib/missile/missile/test-component/missile.component.ts","../../../projects/space-invaders/src/lib/missile/missile/test-component/missile.component.html","../../../projects/space-invaders/src/lib/moon-defense/test-component/moon-defense.component.ts","../../../projects/space-invaders/src/lib/moon-defense/test-component/moon-defense.component.html","../../../projects/space-invaders/src/lib/number/test-component/number.component.ts","../../../projects/space-invaders/src/lib/number/test-component/number.component.html","../../../projects/space-invaders/src/lib/spaceships/spaceship-1/spaceship-1-constants.ts","../../../projects/space-invaders/src/lib/spaceships/spaceship-1/spaceship-1.class.ts","../../../projects/space-invaders/src/lib/spaceships/spaceship/test-component/spaceship.component.ts","../../../projects/space-invaders/src/lib/spaceships/spaceship/test-component/spaceship.component.html","../../../projects/space-invaders/src/lib/space-invaders/space-invaders.component.ts","../../../projects/space-invaders/src/lib/space-invaders/space-invaders.component.html","../../../projects/space-invaders/src/lib/space-invaders.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { GameDataModel } from '../model/game-data.model';\nimport { DebugDataModel } from '../model/debug-data.model';\n\n/**\n * The Cookie service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GameCookieService {\n  /**\n   * The constructor\n   * @param cookieService The cookieService from DI\n   */\n  constructor(private cookieService: CookieService) {}\n\n  /**\n   * Get the cookie\n   */\n  private getCookie(cookieName: string): string {\n    return this.cookieService.get(cookieName);\n  }\n\n  /**\n   * Get the High Score\n   */\n  public getGameData(): GameDataModel {\n    const cookie = this.getCookie('bp-space-invaders');\n    return cookie ? (JSON.parse(cookie) as GameDataModel) : ({ highScore: 0 } as GameDataModel);\n  }\n\n  /**\n   * Set the cookie\n   */\n  public setGameData(data: GameDataModel): void {\n    this.cookieService.set('bp-space-invaders', JSON.stringify(data));\n  }\n\n  /**\n   * Get the Debug information\n   */\n  public getDebugData(): string {\n    const cookie = this.getCookie('bp-space-invaders-debug');\n    /* eslint-disable-next-line */\n    return cookie ? (JSON.parse(cookie)['assetName'] as string) : '';\n  }\n\n  /**\n   * Get the Secondary Debug information\n   */\n  public getSecondaryDebugData(): string {\n    const cookie = this.getCookie('bp-space-invaders-debug');\n    /* eslint-disable-next-line */\n    return cookie ? (JSON.parse(cookie)['secondaryAssetName'] as string) : '';\n  }\n\n  /**\n   * Set the debug cookie data\n   *\n   * @param assetName The asset name\n   */\n  public setDebugData(debugData: DebugDataModel): void {\n    const cookie = this.getCookie('bp-space-invaders-debug');\n    const existingCookie = (cookie ? JSON.parse(cookie) : {}) as DebugDataModel;\n    existingCookie.assetName = debugData.assetName ? debugData.assetName : existingCookie.assetName;\n    existingCookie.secondaryAssetName = debugData.secondaryAssetName\n      ? debugData.secondaryAssetName\n      : existingCookie.secondaryAssetName;\n    this.cookieService.set('bp-space-invaders-debug', JSON.stringify(existingCookie));\n  }\n}\n","/**\n * The Asset Align Enum\n */\nexport enum AssetAlignEnum {\n  /**\n   * Left\n   */\n  left = 'left',\n  /**\n   * Left Third\n   */\n  leftThird = 'leftThird',\n  /**\n   * Left Fourth\n   */\n  leftFourth = 'leftFourth',\n  /**\n   * right\n   */\n  right = 'right',\n  /**\n   * right Third\n   */\n  rightThird = 'rightThird',\n  /**\n   * right Fourth\n   */\n  rightFourth = 'rightFourth',\n  /**\n   * Center\n   */\n  center = 'center'\n}\n","/**\n * The Asset Align Vertical Enum\n */\nexport enum AssetAlignVerticalEnum {\n  /**\n   * Top\n   */\n  top = 'top',\n  /**\n   * Bottom\n   */\n  bottom = 'bottom',\n  /**\n   * Middle\n   */\n  middle = 'middle'\n}\n","/**\n * Block Size\n */\nexport const BLOCK_SIZE = 3;\n/**\n * Columns\n */\nexport const COLS = 260;\n/**\n * Rows\n */\nexport const ROWS = 240;\n/**\n * Alien Rows\n */\nexport const ALIEN_ROWS = 6;\n/**\n * Alien Columns\n */\nexport const ALIEN_COLUMNS = 6;\n/**\n * Moon Height\n */\nexport const MOON_HEIGHT = 10;\n\n/**\n * Colors Darker\n */\nexport const COLORS = [\n  'rgba(34, 65, 4)', // MOON GREEN\n  'rgba(200, 95, 36)', // Light Orange\n  'rgba(8, 136, 23)' //  Green\n];\n\n/**\n * The Level Height\n */\nexport class LEVELHEIGHT {\n  /**\n   * Level 0 Height\n   */\n  static readonly 0 = 20;\n  /**\n   * Level 1 Height\n   */\n  static readonly 1 = 30;\n  /**\n   * Level 2 Height\n   */\n  static readonly 2 = 40;\n  /**\n   * Level 3 Height\n   */\n  static readonly 3 = 50;\n  /**\n   * Level 4 Height\n   */\n  static readonly 4 = 60;\n  /**\n   * Level 5 Height\n   */\n  static readonly 5 = 70;\n  /**\n   * Level 6 Height\n   */\n  static readonly 6 = 80;\n  /**\n   * Level 7 Height\n   */\n  static readonly 7 = 90;\n}\n\n/**\n * The Level Speed\n */\nexport class LEVELSPEED {\n  /**\n   * Level 0 Time\n   */\n  static readonly 0 = 700;\n  /**\n   * Level 1 Time\n   */\n  static readonly 1 = 500;\n  /**\n   * Level 2 Time\n   */\n  static readonly 2 = 350;\n  /**\n   * Level 3 Time\n   */\n  static readonly 3 = 250;\n  /**\n   * Level 4 Time\n   */\n  static readonly 4 = 150;\n  /**\n   * Level 5 Time\n   */\n  static readonly 5 = 100;\n  // 29+ is 20ms\n}\n","import { Injectable, ElementRef } from '@angular/core';\nimport { IAsset } from '../interface/asset.interface';\nimport { Observable, Subject } from 'rxjs';\nimport { ObservableModel } from '../model/observable.model';\nimport { BoundaryModel } from '../model/boundary.model';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\nimport { BoardModel } from '../model/board.model';\nimport { AssetAlignEnum } from '../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../asset/enum/asset-align-vertical.enum';\nimport { AssetClass } from '../asset/asset.class';\nimport { BLOCK_SIZE } from '../gameboard/gameboard-constants';\n\n/**\n * The game service\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GameService {\n  /**\n   *  Master Observable Subject$\n   */\n  private masterSubject$ = new Subject<ObservableModel>();\n\n  /**\n   * The board\n   */\n  private board: BoardModel;\n\n  /**\n   * Valid the Asset\n   * @param asset The asset\n   * @param boundary The board dimensions\n   */\n  valid(asset: IAsset, boundary: BoundaryModel): boolean {\n    return asset.shape.every((row, dy) => {\n      return row.every((value, dx) => {\n        const x = asset.x + dx;\n        const y = asset.y + dy;\n        return (\n          this.isEmpty(value) ||\n          (this.insideWalls(x, boundary) &&\n            this.aboveFloor(y, boundary.floor) &&\n            this.belowCeiling(y, boundary.ceiling))\n        );\n      });\n    });\n  }\n\n  /**\n   * If the shape has value\n   * @param value value of the shape\n   */\n  isEmpty(value: number): boolean {\n    return value === 0;\n  }\n\n  /**\n   * Is the piece within the gameboard walls\n   * @param x The x position\n   * @param boundary The boundary object\n   */\n  private insideWalls(x: number, boundary: BoundaryModel): boolean {\n    return x >= boundary.left && x <= boundary.right;\n  }\n\n  /**\n   * Is the piece within the gameboard floor\n   * @param y The y position\n   * @param boundaryTop The boundary top number\n   */\n  private belowCeiling(y: number, boundaryTop: number): boolean {\n    return y >= boundaryTop;\n  }\n\n  /**\n   * Is the piece within the gameboard floor\n   * @param y The y position\n   * @param boundaryBottom The boundary bottom number\n   */\n  private aboveFloor(y: number, boundaryBottom: number): boolean {\n    return y <= boundaryBottom;\n  }\n\n  /**\n   * Build the boundary\n   * @param boundarySetup The y position\n   */\n  public getBoundary(boundarySetup: BoundarySetupModel): BoundaryModel {\n    return {\n      left: boundarySetup.x,\n      right: boundarySetup.width,\n      ceiling: boundarySetup.y,\n      floor: boundarySetup.height\n    } as BoundaryModel;\n  }\n\n  /**\n   * Determine if an asset has collided with another asset\n   * @param asset The asset receiving the damage\n   * @param damageAsset The asset giving the damage\n   */\n  public isHit(asset: IAsset, damageAsset: IAsset): boolean {\n    if (\n      asset.x <= damageAsset.x &&\n      damageAsset.x <= asset.x + asset.shape[0].length &&\n      asset.y <= damageAsset.y &&\n      damageAsset.y <= asset.y + asset.shape.length\n    ) {\n      const startY = damageAsset.y;\n      let maxY = startY + damageAsset.shape.length;\n      if (maxY > asset.y + asset.shape.length) {\n        maxY = asset.y + asset.shape.length;\n      }\n\n      for (let y = startY; y < maxY; y++) {\n        for (let x = damageAsset.x; x < damageAsset.x + damageAsset.shape[y - damageAsset.y].length; x++) {\n          const assetY = Math.round(Math.abs(y - asset.y));\n          const assetX = Math.round(Math.abs(x - asset.x));\n          const damageAssetY = Math.round(Math.abs(y - damageAsset.y));\n          const damageAssetX = Math.round(Math.abs(x - damageAsset.x));\n          if (asset.shape[assetY][assetX] > 0 && damageAsset.shape[damageAssetY][damageAssetX] > 0) {\n            return true;\n          }\n        }\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Provide the outline\n   *\n   * @param ctx The Canvas Rendering Context 2D\n   * @param columns The number of Columns\n   * @param rows The number of rows\n   * @param offset The offset for the grid\n   */\n  public addOutlines(ctx: CanvasRenderingContext2D, offset: number, width: number): void {\n    ctx.fillStyle = 'grey';\n\n    let lastIndex = 0;\n    // vertical lines\n    for (let index = 0; index < ctx.canvas.width; index += offset) {\n      ctx.fillRect(index, 0, width, ctx.canvas.height);\n      lastIndex = index;\n    }\n\n    ctx.fillRect(lastIndex + 1, 0, width, ctx.canvas.height);\n\n    // horizontal lines\n    for (let index = 0; index < ctx.canvas.height; index += offset) {\n      ctx.fillRect(0, index, ctx.canvas.width, width);\n      lastIndex = index;\n    }\n\n    ctx.fillRect(0, lastIndex + 1, ctx.canvas.width, width);\n\n    ctx.fillStyle = 'red';\n    ctx.fillRect(ctx.canvas.width / (BLOCK_SIZE * 2), 0, width, ctx.canvas.height);\n    ctx.fillRect(0, ctx.canvas.height / (BLOCK_SIZE * 2), ctx.canvas.width, width);\n  }\n\n  /**\n   * Initialize the board\n   *\n   * @param ctx The Canvas Rendering Context 2D\n   * @param canvas The canvas element\n   * @param columns The number of Columns\n   * @param rows The number of rows\n   * @param blockSize The block size\n   */\n  public initBoard(\n    canvas: ElementRef<HTMLCanvasElement>,\n    columns: number,\n    rows: number,\n    blockSize: number\n  ): CanvasRenderingContext2D {\n    const ctx = canvas.nativeElement.getContext('2d');\n\n    this.board = {\n      x: 0,\n      y: 0,\n      height: rows,\n      width: columns\n    } as BoardModel;\n\n    // Calculate size of canvas from constants.\n    ctx.canvas.width = columns * blockSize + 1;\n    ctx.canvas.height = rows * blockSize + 1;\n\n    // Scale so we don't need to give size on every draw.\n    ctx.scale(blockSize, blockSize);\n\n    return ctx;\n  }\n\n  /**\n   * Get the game board\n   */\n  public getGameboard(): BoardModel {\n    return this.board;\n  }\n\n  /**\n   * Get the master observable\n   */\n  public getMasterObservable(): Observable<ObservableModel> {\n    return this.masterSubject$;\n  }\n\n  /**\n   * Get the master observable\n   */\n  public emitMasterObservableEvent(data: ObservableModel): void {\n    this.masterSubject$.next(data);\n  }\n\n  /**\n   * Position the Asset\n   */\n  public positionAsset(\n    asset: AssetClass,\n    alignPosition: AssetAlignEnum,\n    justifyPosition: AssetAlignVerticalEnum\n  ): IAsset {\n    let x = 0;\n    let y = 0;\n\n    if (alignPosition === AssetAlignEnum.center) {\n      x = (this.board.width - asset.getAssetWidth()) / 2;\n    } else if (alignPosition === AssetAlignEnum.leftThird) {\n      x = this.board.width / 3 - asset.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.leftFourth) {\n      x = this.board.width / 4 - asset.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.rightThird) {\n      x = (this.board.width * 2) / 3 - asset.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.rightFourth) {\n      x = (this.board.width * 3) / 4 - asset.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.right) {\n      x = this.board.width - asset.getAssetWidth();\n    }\n\n    if (justifyPosition === AssetAlignVerticalEnum.bottom) {\n      y = this.board.height - asset.getAssetHeight();\n    } else if (justifyPosition === AssetAlignVerticalEnum.middle) {\n      y = (this.board.height - asset.getAssetHeight()) / 2;\n    }\n\n    return {\n      x: Math.round(x),\n      y: Math.round(y)\n    } as IAsset;\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0],\n  [0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0],\n  [0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0],\n  [0, 2, 2, 0, 0, 2, 0, 0, 2, 2, 0, 0, 2, 0, 0, 2, 2, 0],\n  [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2],\n  [0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0],\n  [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n","/**\n * Columns\n */\nexport const COLS = 31;\n/**\n * Rows\n */\nexport const ROWS = 31;\n/**\n * Block Size\n */\nexport const BLOCK_SIZE = 25;\n\n/**\n * The colors\n */\nexport const COLORS = [\n  'none',\n  'rgba(200, 95, 36)', // Light Orange\n  'rgba(255, 0, 0)', // Red\n  'rgba(122, 122, 122)', // Grey\n  'rgba(163, 46, 132)' // Purple\n];\n\n/**\n * The keys\n */\nexport class KEY {\n  /**\n   * Down\n   */\n  static readonly DOWN = 'ArrowDown';\n  /**\n   * LEFT\n   */\n  static readonly LEFT = 'ArrowLeft';\n  /**\n   * RIGHT\n   */\n  static readonly RIGHT = 'ArrowRight';\n}\n\n/**\n * The first destruction animation\n */\nconst DESTRUCTION_ANIMATION_1 = [\n  [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],\n  [0, 2, 0, 0, 0, 0, 0, 0, 2, 0],\n  [0, 0, 2, 3, 2, 0, 2, 0, 0, 0],\n  [0, 0, 2, 0, 2, 2, 3, 2, 0, 0],\n  [0, 0, 0, 2, 3, 2, 2, 0, 0, 0],\n  [0, 0, 2, 3, 2, 2, 0, 2, 0, 0],\n  [0, 0, 2, 0, 2, 3, 2, 2, 0, 0],\n  [0, 2, 0, 0, 0, 0, 0, 0, 2, 0],\n  [2, 0, 0, 0, 0, 0, 0, 0, 0, 2]\n];\n\n/**\n * The second destruction animation\n */\nconst DESTRUCTION_ANIMATION_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 2, 0, 0, 0, 0, 2, 0, 0],\n  [0, 0, 0, 3, 0, 2, 3, 0, 0, 0],\n  [0, 0, 0, 0, 3, 0, 0, 0, 0, 0],\n  [0, 0, 0, 3, 0, 2, 2, 0, 0, 0],\n  [0, 0, 2, 0, 0, 0, 0, 2, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The third destruction animation\n */\nconst DESTRUCTION_ANIMATION_3 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 3, 0, 2, 0, 0, 0, 0],\n  [0, 0, 0, 0, 3, 0, 0, 0, 0, 0],\n  [0, 0, 0, 2, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The destruction animations\n */\nexport const DESTRUCTION_ANIMATION = [DESTRUCTION_ANIMATION_1, DESTRUCTION_ANIMATION_2, DESTRUCTION_ANIMATION_3];\n","/**\n * The Observable Enum\n */\nexport enum ObservableTypeEnum {\n  /**\n   * Alien Boss Destroyed\n   */\n  alienBossDestroyed = 'alienBossDestroyed',\n  /**\n   * Alien Creep Left Boundary\n   */\n  alienCreepLeftBoundary = 'alienCreepLeftBoundary',\n  /**\n   * Alien Creep Right Boundary\n   */\n  alienCreepRightBoundary = 'alienCreepRightBoundary',\n  /**\n   * Alien Destroyed\n   */\n  alienDestroyed = 'alienDestroyed',\n  /**\n   * Alien Drop\n   */\n  alienDrop = 'alienDrop',\n  /**\n   * Bomb Dropped Event\n   */\n  bombDropped = 'bombDropped',\n  /**\n   * Display Score Event\n   */\n  displayScore = 'displayScore',\n  /**\n   * Game Over\n   */\n  gameOver = 'gameOver',\n  /**\n   * Game Paused\n   */\n  gamePaused = 'gamePaused',\n  /**\n   * Game Started\n   */\n  gameStarted = 'gameStarted',\n  /**\n   * Key Down Event\n   */\n  keyDownEvent = 'keyDownEvent',\n  /**\n   * Key Up Event\n   */\n  keyUpEvent = 'keyUpEvent',\n  /**\n   * Missile Shot Event\n   */\n  missileShot = 'missileShot',\n  /**\n   * Moon Defense Destroyed\n   */\n  moonDefenseDestroyed = 'moonDefenseDestroyed',\n  /**\n   * Spaceship Hit\n   */\n  spaceshipDestroyed = 'spaceshipDestroyed'\n}\n","import { IAsset } from '../interface/asset.interface';\nimport { GameService } from '../service/game.service';\nimport { AssetAlignEnum } from './enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from './enum/asset-align-vertical.enum';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { TimerModel } from '../model/timer.model';\nimport { BoundaryModel } from '../model/boundary.model';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\n\n/**\n * The Asset Class\n */\nexport abstract class AssetClass implements IAsset {\n  /**\n   * The shape for determining the boundaries\n   */\n  public shape: number[][];\n  /**\n   * The x coordinate\n   */\n  public x: number;\n  /**\n   * The y coordinate\n   */\n  public y: number;\n  /**\n   * The animate once\n   */\n  public isAnimateOnce: boolean;\n  /**\n   * The asset to animate\n   */\n  protected assetAnimation: number[][];\n  /**\n   * The destruction to animate\n   */\n  protected destructionAnimation: number[][];\n  /**\n   * The engine animation\n   */\n  protected engineAnimation: number[][];\n  /**\n   * The request id from the animation\n   */\n  protected requestId: number;\n  /**\n   * The destroy request id from the animation\n   */\n  protected destructionRequestId: number;\n  /**\n   * The Asset Timmer\n   */\n  protected assetTimer: TimerModel;\n  /**\n   * The Destruction Timmer\n   */\n  protected destructionTimer: TimerModel;\n  /**\n   * engine Timer\n   */\n  protected engineTimer: TimerModel;\n  /**\n   * The engine X offset\n   */\n  protected engineXOffset: number;\n  /**\n   * The engine Y offset\n   */\n  protected engineYOffset: number;\n  /**\n   * Animation Counter\n   */\n  protected animationCounter: number;\n  /**\n   * Destruction Counter\n   */\n  protected destructionAnimationCounter: number;\n  /**\n   * Engine Animation Counter\n   */\n  protected engineAnimationCounter: number;\n  /**\n   * the boardary model\n   */\n  protected boundary: BoundaryModel;\n  /**\n   * Is the asset is destroyed\n   */\n  public isDestroyed: boolean;\n  /**\n   * If the asset knowns the game is over\n   */\n  protected isGameOver: boolean;\n  /**\n   * If the asset knowns the game is paused\n   */\n  protected isGamePaused: boolean;\n  /**\n   * Asset Animations\n   */\n  protected assetAnimations: number[][][];\n  /**\n   * Engine Animations\n   */\n  protected engineAnimations: number[][][];\n  /**\n   * Destruction Animations\n   */\n  protected destructionAnimations: number[][][];\n\n  /**\n   * Constructor\n   * @param ctx The ctx\n   * @param x initial x parameter\n   * @param y initial y parameter\n   */\n  constructor(\n    protected gameService: GameService,\n    protected ctx: CanvasRenderingContext2D,\n    protected boundarySetup: BoundarySetupModel,\n    protected uid: number\n  ) {\n    this.x = 0;\n    this.y = 0;\n    this.isAnimateOnce = false;\n\n    this.isDestroyed = false;\n    this.isGameOver = false;\n    this.isGamePaused = false;\n\n    this.spawn();\n\n    this.boundary = this.gameService.getBoundary(boundarySetup);\n\n    this.init();\n  }\n\n  /**\n   * Init the asset\n   */\n  init(): void {\n    this.gameService.getMasterObservable().subscribe((result: ObservableModel) => {\n      if (result.type === ObservableTypeEnum.keyDownEvent || result.type === ObservableTypeEnum.keyUpEvent) {\n        this.processKeyStroke(result);\n      } else if (result.type === ObservableTypeEnum.gameOver) {\n        this.isGameOver = result.booleanData;\n      } else if (result.type === ObservableTypeEnum.gamePaused) {\n        this.isGamePaused = result.booleanData;\n      }\n    });\n  }\n\n  /**\n   * Get the Asset height\n   */\n  getAssetHeight(): number {\n    return this.shape.length;\n  }\n\n  /**\n   * Get the Asset Width\n   */\n  getAssetWidth(): number {\n    return this.shape[0].length;\n  }\n\n  /**\n   * Position the Asset\n   */\n  positionAsset(alignPosition: AssetAlignEnum, justifyPosition: AssetAlignVerticalEnum): IAsset {\n    let x = 0;\n    let y = 0;\n\n    if (alignPosition === AssetAlignEnum.center) {\n      x = (this.boundary.right - this.getAssetWidth()) / 2;\n    } else if (alignPosition === AssetAlignEnum.leftThird) {\n      x = this.boundary.right / 3 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.leftFourth) {\n      x = this.boundary.right / 4 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.rightThird) {\n      x = (this.boundary.right * 2) / 3 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.rightFourth) {\n      x = (this.boundary.right * 3) / 4 - this.getAssetWidth() / 2;\n    } else if (alignPosition === AssetAlignEnum.right) {\n      x = this.boundary.right - this.getAssetWidth();\n    }\n\n    if (justifyPosition === AssetAlignVerticalEnum.bottom) {\n      y = this.boundary.floor - this.getAssetHeight();\n    } else if (justifyPosition === AssetAlignVerticalEnum.middle) {\n      y = (this.boundary.floor - this.getAssetHeight()) / 2;\n    }\n\n    return {\n      x: Math.round(x),\n      y: Math.round(y)\n    } as IAsset;\n  }\n\n  /**\n   * Process the key stroke\n   * @param eventCode the key event code\n   */\n  /* eslint-disable-next-line */\n  protected processKeyStroke(event: ObservableModel): void {}\n\n  /**\n   * Spawn the asset\n   */\n  protected spawn(): void {\n    if (!(this.assetAnimation && this.assetAnimation.length > 0)) {\n      throw new Error('You must have an asset array.');\n    }\n\n    if (!this.engineAnimation) {\n      throw new Error('You must have an engine array.');\n    }\n\n    this.engineXOffset = 0;\n    this.engineYOffset = this.assetAnimation.length;\n    this.assetTimer = { start: 0, elapsed: 0 };\n    this.destructionTimer = { start: 0, elapsed: 0 };\n    this.engineTimer = { start: 0, elapsed: 0 };\n    this.animationCounter = 0;\n    this.engineAnimationCounter = 0;\n    this.destructionAnimationCounter = 0;\n\n    this.assetTimer.start = performance.now();\n    this.destructionTimer.start = performance.now();\n    this.engineTimer.start = performance.now();\n\n    this.restore();\n  }\n\n  /**\n   * Restore the\n   */\n  restore(): void {\n    /* eslint-disable-next-line */\n    this.shape = JSON.parse(\n      /* eslint-disable-next-line */\n      JSON.stringify(this.assetAnimation.concat(JSON.parse(JSON.stringify(this.engineAnimation))))\n    );\n  }\n\n  /**\n   * Move the asset\n   * @param asset The asset input\n   */\n  move(asset: IAsset): void {\n    this.x = Math.round(asset.x);\n    this.y = Math.round(asset.y);\n  }\n\n  /**\n   * Determine if we should stop the animation\n   */\n  protected stopAnimation(): boolean {\n    if (this.isDestroyed || this.isGameOver || this.isGamePaused || this.isAnimateOnce) {\n      cancelAnimationFrame(this.requestId);\n      return true;\n    }\n\n    return false;\n  }\n}\n","import { COLORS, DESTRUCTION_ANIMATION } from './alien-constants';\nimport { IAsset } from '../../interface/asset.interface';\nimport { GameService } from '../../service/game.service';\nimport { ObservableModel } from '../../model/observable.model';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\nimport { AssetClass } from '../../asset/asset.class';\nimport { TimerModel } from '../../model/timer.model';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Alien Class\n */\nexport abstract class AlienClass extends AssetClass {\n  /**\n   * The Missile Timer\n   */\n  protected bombTimer: TimerModel;\n  /**\n   * The can fire weapon\n   */\n  public canFireWeapon: boolean;\n  /**\n   * The alienType\n   */\n  protected isAlienAsset: boolean;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number,\n    private assetPoints: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid);\n\n    this.bombTimer = {\n      start: performance.now(),\n      elapsed: 0\n    } as TimerModel;\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimation = this.assetAnimations[0];\n    this.engineAnimation = [];\n    this.destructionAnimations = DESTRUCTION_ANIMATION;\n    this.destructionAnimation = this.destructionAnimations[0];\n    super.spawn();\n  }\n\n  /**\n   * Draw everything necessary\n   */\n  protected draw(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.drawAlien();\n    this.ctx.restore();\n  }\n\n  /**\n   * Draw the alien\n   */\n  private drawAlien(): void {\n    this.assetAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 0) {\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(x, y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * Is the alien hit\n   * @param missileAsset The Missile Asset\n   */\n  isHit(missileAsset: IAsset): void {\n    if (!this.isDestroyed) {\n      this.isDestroyed = this.gameService.isHit(\n        {\n          x: this.x,\n          y: this.y,\n          shape: this.shape\n        } as IAsset,\n        missileAsset\n      );\n\n      const alienType = this.isAlienAsset ? ObservableTypeEnum.alienDestroyed : ObservableTypeEnum.alienBossDestroyed;\n\n      if (this.isDestroyed) {\n        this.gameService.emitMasterObservableEvent({\n          type: alienType,\n          numberData: this.uid,\n          pointData: this.points\n        } as ObservableModel);\n        missileAsset.isDestroyed = true;\n      }\n    }\n  }\n\n  /**\n   * Allow the alien to creep\n   * @param asset The Asset\n   */\n  creep(asset: IAsset): boolean {\n    asset.shape = this.shape;\n    return this.gameService.valid(asset, this.boundary);\n  }\n\n  /**\n   * Randomize when an alien can drop a bomb\n   */\n  private randomizeDropBomb(): boolean {\n    if (this.canFireWeapon) {\n      const randomBombNumber = Math.floor(Math.random() * 10 + 1);\n      return randomBombNumber >= 4 && randomBombNumber <= 6;\n    }\n\n    return false;\n  }\n\n  /**\n   * Draw the alien\n   */\n  private drawAlienDestruction(): void {\n    this.destructionAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 0) {\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(this.x + x, this.y + y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * Animate the alien\n   * @param now the current time\n   */\n  protected destructionAnimate(now = 0): void {\n    this.destructionTimer.elapsed = now - this.destructionTimer.start;\n\n    if (this.destructionAnimationCounter === this.destructionAnimations.length) {\n      cancelAnimationFrame(this.destructionRequestId);\n      return;\n    }\n\n    if (this.destructionTimer.elapsed > 50) {\n      this.destructionTimer.start = now;\n      this.destructionAnimation =\n        this.destructionAnimations[this.destructionAnimationCounter++ % this.destructionAnimations.length];\n    }\n\n    this.drawAlienDestruction();\n    this.destructionRequestId = requestAnimationFrame(this.destructionAnimate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * Animate the alien\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n    this.bombTimer.elapsed = now - this.bombTimer.start;\n\n    if (this.isDestroyed) {\n      this.destructionAnimate();\n      return;\n    }\n\n    this.destructionAnimationCounter = 0;\n\n    if (this.assetTimer.elapsed > 900) {\n      this.assetTimer.start = now;\n      this.assetAnimation = this.assetAnimations[this.animationCounter++ % this.assetAnimations.length];\n    }\n\n    if (this.bombTimer.elapsed > 1000) {\n      this.bombTimer.start = now;\n      if (this.randomizeDropBomb()) {\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.bombDropped,\n          assetCoordinateData: {\n            x: this.x + this.getAssetWidth() / 2 - 1,\n            y: this.y + this.getAssetHeight() - 5\n          } as IAsset\n        } as ObservableModel);\n      }\n    }\n\n    this.draw();\n  }\n\n  /**\n   * Set the asset points\n   * @param points The number of points\n   */\n  get points() {\n    return this.assetPoints;\n  }\n\n  /**\n   * If the asset is an alien or alien boss\n   */\n  public isAlien(): boolean {\n    return this.isAlienAsset;\n  }\n}\n","import { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { KEY } from '../alien/alien-constants';\nimport { IAsset } from '../../interface/asset.interface';\nimport { ObservableModel } from '../../model/observable.model';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\nimport { AssetAlignEnum } from '../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../asset/enum/asset-align-vertical.enum';\n\n/**\n * The Alien Boss Class\n */\nexport abstract class AlienBossClass extends AlienClass {\n  /**\n   * the direction of the ship\n   */\n  private directionLeft: boolean;\n  /**\n   * The moves\n   */\n  private moves = {\n    [KEY.LEFT]: (asset: IAsset): IAsset => ({ ...asset, x: asset.x - 5 }),\n    [KEY.RIGHT]: (asset: IAsset): IAsset => ({ ...asset, x: asset.x + 5 })\n  };\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number,\n    points: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, points);\n    this.directionLeft = true;\n    this.isAlienAsset = false;\n  }\n\n  /**\n   * Determine the direction of the boss\n   */\n  private determineBossDirection(): void {\n    this.directionLeft = Math.floor(Math.random() * 10) + 1 > 5;\n  }\n\n  /**\n   * positiong the alien boss for another flight\n   */\n  public positionAlienBoss(): void {\n    this.determineBossDirection();\n    const direction = this.directionLeft ? AssetAlignEnum.right : AssetAlignEnum.left;\n    const asset = this.positionAsset(direction, AssetAlignVerticalEnum.top);\n    asset.y = this.y;\n    this.move(asset);\n    this.isDestroyed = false;\n  }\n\n  /**\n   * Animate the alien\n   * @param now the current time\n   */\n  public override animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    if (this.isDestroyed) {\n      this.destructionAnimate();\n      return;\n    }\n    if (this.isGameOver) {\n      this.isDestroyed = true;\n      return;\n    }\n\n    this.destructionAnimationCounter = 0;\n\n    if (this.assetTimer.elapsed > 200) {\n      this.assetTimer.start = now;\n      this.assetAnimation = this.assetAnimations[this.animationCounter++ % this.assetAnimations.length];\n      const asset = this.directionLeft ? this.moves['ArrowLeft'](this) : this.moves['ArrowRight'](this);\n      if (this.gameService.valid(asset, this.boundary)) {\n        this.move(asset);\n      } else {\n        this.isDestroyed = true;\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.alienBossDestroyed,\n          booleanData: true,\n          pointData: 0\n        } as ObservableModel);\n      }\n    }\n\n    this.draw();\n  }\n}\n","import { ASSET_ANIMATION } from './alien-boss-1-constants';\nimport { GameService } from '../../service/game.service';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\nimport { AlienBossClass } from '../alien-boss/alien-boss.class';\n\n/**\n * The Alien Boss 1 Class\n */\nexport class AlienBoss1Class extends AlienBossClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 120);\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0],\n  [0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0],\n  [0, 0, 0, 4, 4, 0, 0, 4, 4, 0, 0, 4, 4, 0, 0, 4, 4, 0, 0, 0],\n  [0, 0, 0, 4, 4, 0, 0, 4, 4, 0, 0, 4, 4, 0, 0, 4, 4, 0, 0, 0],\n  [0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0],\n  [0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0],\n  [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n","import { ASSET_ANIMATION } from './alien-boss-2-constants';\nimport { GameService } from '../../service/game.service';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\nimport { AlienBossClass } from '../alien-boss/alien-boss.class';\n\n/**\n * The Alien Boss 2 Class\n */\nexport class AlienBoss2Class extends AlienBossClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 120);\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../../service/game.service';\nimport { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';\nimport { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { BoundarySetupModel } from '../../../model/boundary-set.model';\nimport { AlienBoss1Class } from '../../alien-boss-1/alien-boss-1.class';\nimport { AlienBossClass } from '../alien-boss.class';\nimport { AlienBoss2Class } from '../../alien-boss-2/alien-boss-2.class';\nimport { DebugDataModel } from '../../../model/debug-data.model';\nimport { GameCookieService } from '../../../service/game-cookie.service';\n\n/**\n * The Alien Component\n */\n@Component({\n  selector: 'bp-alien-boss',\n  templateUrl: './alien-boss.component.html',\n  styleUrls: ['./alien-boss.component.scss']\n})\nexport class AlienBossComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * request\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * aliens\n   */\n  private alienBosses: AlienBossClass[];\n\n  /**\n   * The alien\n   */\n  private alienBoss: AlienBossClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   * @param gameCookie The Game Cookie Service\n   */\n  constructor(private gameService: GameService, private gameCookieService: GameCookieService) {\n    this.isAnimateOnce = true;\n    this.assets = [\n      {\n        key: 'alienBoss',\n        name: 'Boss'\n      } as AssetConfigurationModel,\n      {\n        key: 'alienBoss2',\n        name: 'Boss 2'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const columns = 20;\n    const rows = 20;\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, 25);\n    this.addAlienBosses({\n      x: 0,\n      y: 0,\n      height: rows,\n      width: columns\n    } as BoundarySetupModel);\n\n    this.toggleAssets(this.gameCookieService.getSecondaryDebugData());\n\n    this.animate();\n  }\n\n  /**\n   * Add the aliens\n   */\n  private addAlienBosses(boundary: BoundarySetupModel): void {\n    this.alienBosses = [];\n\n    const boss = new AlienBoss1Class(this.gameService, this.ctx, boundary, 1);\n    boss.move(boss.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    boss.isAnimateOnce = true;\n    this.alienBosses.push(boss);\n\n    const boss2 = new AlienBoss2Class(this.gameService, this.ctx, boundary, 1);\n    boss2.move(boss2.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    boss2.isAnimateOnce = true;\n    this.alienBosses.push(boss2);\n\n    this.alienBoss = this.alienBosses[1];\n    this.alienBoss.isAnimateOnce = true;\n    this.alienBoss.isDestroyed = false;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.isAnimateOnce = !this.isAnimateOnce;\n    this.alienBoss.isDestroyed = false;\n    this.alienBoss.move(this.alienBoss.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.025);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.alienBoss.animate();\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.alienBoss.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.alienBosses.map((alienBoss: AlienBossClass) => {\n      alienBoss.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n        this.gameCookieService.setDebugData({\n          secondaryAssetName: key\n        } as DebugDataModel);\n      }\n    });\n\n    this.alienBoss = this.alienBosses[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Alien</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","/**\n * The First asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The Second Asset Animation\n */\nconst ASSET_ANIMATE_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1, ASSET_ANIMATE_2];\n","import { ASSET_ANIMATION } from './alien-1-constants';\nimport { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Alien 1 Class\n */\nexport class Alien1Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 30);\n    this.isAlienAsset = true;\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The Second asset animation\n */\nconst ASSET_ANIMATE_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1, ASSET_ANIMATE_2];\n","import { ASSET_ANIMATION } from './alien-2-constants';\nimport { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Alien 2 Class\n */\nexport class Alien2Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 25);\n    this.isAlienAsset = true;\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The Second asset animation\n */\nconst ASSET_ANIMATE_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1, ASSET_ANIMATE_2];\n","import { ASSET_ANIMATION } from './alien-3-constants';\nimport { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Alien 3 Class\n */\nexport class Alien3Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 20);\n    this.isAlienAsset = true;\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The Second asset animation\n */\nconst ASSET_ANIMATE_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1, ASSET_ANIMATE_2];\n","import { ASSET_ANIMATION } from './alien-4-constants';\nimport { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Alien 4 Class\n */\nexport class Alien4Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 15);\n    this.isAlienAsset = true;\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The Second asset animation\n */\nconst ASSET_ANIMATE_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1, ASSET_ANIMATE_2];\n","import { ASSET_ANIMATION } from './alien-5-constants';\nimport { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Alien 5 Class\n */\nexport class Alien5Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 10);\n    this.isAlienAsset = true;\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The Second asset animation\n */\nconst ASSET_ANIMATE_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0],\n  [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1, ASSET_ANIMATE_2];\n","import { ASSET_ANIMATION } from './alien-6-constants';\nimport { GameService } from '../../service/game.service';\nimport { AlienClass } from '../alien/alien.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Alien 6 Class\n */\nexport class Alien6Class extends AlienClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid, 5);\n    this.isAlienAsset = true;\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    super.spawn();\n  }\n}\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../../service/game.service';\nimport { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';\nimport { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { AlienClass } from '../alien.class';\nimport { Alien1Class } from '../../alien-1/alien-1.class';\nimport { Alien2Class } from '../../alien-2/alien-2.class';\nimport { Alien3Class } from '../../alien-3/alien-3.class';\nimport { Alien4Class } from '../../alien-4/alien-4.class';\nimport { Alien5Class } from '../../alien-5/alien-5.class';\nimport { Alien6Class } from '../../alien-6/alien-6.class';\nimport { BoundarySetupModel } from '../../../model/boundary-set.model';\nimport { GameCookieService } from '../../../service/game-cookie.service';\nimport { DebugDataModel } from '../../../model/debug-data.model';\n\n/**\n * The Alien Component\n */\n@Component({\n  selector: 'bp-alien',\n  templateUrl: './alien.component.html',\n  styleUrls: ['./alien.component.scss']\n})\nexport class AlienComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * request\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * aliens\n   */\n  private aliens: AlienClass[];\n\n  /**\n   * The alien\n   */\n  private alien: AlienClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   * @param gameCookie The Game Cookie Service\n   */\n  constructor(private gameService: GameService, private gameCookieService: GameCookieService) {\n    this.isAnimateOnce = true;\n    this.assets = [\n      {\n        key: 'alien1',\n        name: 'A-1'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien2',\n        name: 'A-2'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien3',\n        name: 'A-3'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien4',\n        name: 'A-4'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien5',\n        name: 'A-5'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien6',\n        name: 'A-6'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 20;\n    const columns = 20;\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, 25);\n\n    this.addAliens({\n      x: 0,\n      y: 0,\n      height: rows,\n      width: columns\n    } as BoundarySetupModel);\n\n    this.toggleAssets(this.gameCookieService.getSecondaryDebugData());\n\n    this.animate();\n  }\n\n  /**\n   * Add the aliens\n   */\n  private addAliens(boundary: BoundarySetupModel): void {\n    this.aliens = [];\n\n    const alien1 = new Alien1Class(this.gameService, this.ctx, boundary, 1);\n    alien1.move(alien1.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    alien1.isDestroyed = true;\n    this.aliens.push(alien1);\n\n    const alien2 = new Alien2Class(this.gameService, this.ctx, boundary, 1);\n    alien2.isDestroyed = true;\n    alien2.move(alien2.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.aliens.push(alien2);\n\n    const alien3 = new Alien3Class(this.gameService, this.ctx, boundary, 1);\n    alien3.isDestroyed = true;\n    alien3.move(alien3.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.aliens.push(alien3);\n\n    const alien4 = new Alien4Class(this.gameService, this.ctx, boundary, 1);\n    alien4.isDestroyed = true;\n    alien4.move(alien4.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.aliens.push(alien4);\n\n    const alien5 = new Alien5Class(this.gameService, this.ctx, boundary, 1);\n    alien5.isDestroyed = true;\n    alien5.move(alien5.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.aliens.push(alien5);\n\n    const alien6 = new Alien6Class(this.gameService, this.ctx, boundary, 1);\n    alien6.isDestroyed = true;\n    alien6.move(alien6.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.aliens.push(alien6);\n\n    this.alien = this.aliens[0];\n    this.alien.isDestroyed = false;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.isAnimateOnce = !this.isAnimateOnce;\n    this.alien.isDestroyed = false;\n    this.alien.move(this.alien.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 5, 0.025);\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.draw();\n    this.alien.animate(now);\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.alien.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.aliens.map((alien: AlienClass) => {\n      alien.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n        this.gameCookieService.setDebugData({\n          secondaryAssetName: key\n        } as DebugDataModel);\n      }\n    });\n\n    this.alien = this.aliens[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Alien</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","/**\n * Columns\n */\nexport const COLS = 31;\n/**\n * Rows\n */\nexport const ROWS = 31;\n/**\n * Block Size\n */\nexport const BLOCK_SIZE = 25;\n\n/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [4, 4],\n  [4, 4],\n  [4, 4],\n  [4, 4],\n  [4, 4]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n\n/**\n * The colors\n */\nexport const COLORS = [\n  'none',\n  'rgba(255, 132, 0)', // Orange\n  'rgba(255, 255, 0)', // Yellow\n  'rgba(255, 0, 0)', // Red\n  'rgba(255, 255, 255)' //  White\n];\n\n/**\n * The keys\n */\nexport class KEY {\n  /**\n   * up\n   */\n  static readonly DOWN = 'ArrowDown';\n}\n\n/**\n * The first destruction animation\n */\nconst DESTRUCTION_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 2, 0, 0, 0, 0]\n];\n\n/**\n * The second destruction animation\n */\nconst DESTRUCTION_ANIMATION_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 3, 2, 1, 3, 0, 0, 0],\n  [0, 0, 0, 0, 1, 2, 0, 0, 0, 0]\n];\n\n/**\n * The third destruction animation\n */\nconst DESTRUCTION_ANIMATION_3 = [\n  [0, 0, 1, 2, 3, 3, 2, 1, 0, 0],\n  [0, 0, 0, 3, 2, 1, 3, 0, 0, 0],\n  [0, 0, 0, 0, 1, 2, 0, 0, 0, 0]\n];\n\n/**\n * The destruction animations\n */\nexport const DESTRUCTION_ANIMATION = [DESTRUCTION_ANIMATION_1, DESTRUCTION_ANIMATION_2, DESTRUCTION_ANIMATION_3];\n","import { ASSET_ANIMATION, COLORS, KEY, DESTRUCTION_ANIMATION } from './bomb-constants';\nimport { IAsset } from '../interface/asset.interface';\nimport { GameService } from '../service/game.service';\nimport { AssetClass } from '../asset/asset.class';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\n\n/**\n * The Bomb Class\n */\nexport class BombClass extends AssetClass {\n  /**\n   * The moves\n   */\n  private moves = {\n    [KEY.DOWN]: (asset: IAsset): IAsset => ({ ...asset, y: asset.y + 5 })\n  };\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the bomb\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid);\n  }\n\n  /**\n   * Spawn the bomb\n   */\n  protected override spawn(): void {\n    this.assetAnimation = ASSET_ANIMATION[0];\n    this.engineAnimation = [];\n    this.destructionAnimations = DESTRUCTION_ANIMATION;\n    this.destructionAnimation = this.destructionAnimations[0];\n    super.spawn();\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    this.ctx.save();\n    this.ctx.scale(1, 1);\n    this.drawBomb();\n    this.ctx.restore();\n  }\n\n  /**\n   * Draw the bomb\n   */\n  private drawBomb(): void {\n    this.assetAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        this.ctx.fillStyle = COLORS[value];\n        this.ctx.fillRect(this.x + x, this.y + y, 1, 1);\n      });\n    });\n  }\n\n  /**\n   * Draw the bomb destruction\n   */\n  private drawBombDestruction(): void {\n    this.destructionAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 0) {\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(this.x + x, this.y + y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * Animate the alien\n   * @param now the current time\n   */\n  protected destructionAnimate(now = 0): void {\n    this.destructionTimer.elapsed = now - this.destructionTimer.start;\n\n    if (this.destructionAnimationCounter === this.destructionAnimations.length) {\n      cancelAnimationFrame(this.destructionRequestId);\n      return;\n    }\n\n    if (this.destructionTimer.elapsed > 30) {\n      this.destructionTimer.start = now;\n      this.destructionAnimation =\n        this.destructionAnimations[this.destructionAnimationCounter++ % this.destructionAnimations.length];\n    }\n\n    this.drawBombDestruction();\n    this.destructionRequestId = requestAnimationFrame(this.destructionAnimate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * Animate the bomb\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.engineTimer.elapsed = now - this.engineTimer.start;\n\n    this.destructionAnimationCounter = 0;\n\n    if (this.engineTimer.elapsed > 75) {\n      this.engineTimer.start = now;\n      const asset = this.moves['ArrowDown'](this);\n      if (this.gameService.valid(asset, this.boundary)) {\n        this.move(asset);\n      } else {\n        this.destructionAnimate();\n        this.isDestroyed = true;\n      }\n    }\n\n    this.draw();\n  }\n}\n","import { Component, OnInit, ElementRef, ViewChild, HostListener } from '@angular/core';\n\nimport { BLOCK_SIZE, COLS, ROWS } from '../bomb-constants';\nimport { BombClass } from '../bomb.class';\nimport { GameService } from '../../service/game.service';\nimport { AssetAlignEnum } from '../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../asset/enum/asset-align-vertical.enum';\nimport { ObservableModel } from '../../model/observable.model';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Bomb Component\n */\n@Component({\n  selector: 'bp-bomb',\n  templateUrl: './bomb.component.html',\n  styleUrls: ['./bomb.component.scss']\n})\nexport class BombComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * The bomb\n   */\n  private bomb: BombClass;\n\n  /**\n   * requestI\n   */\n  private requestId: number;\n\n  /**\n   * request\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {}\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.ctx = this.gameService.initBoard(this.canvas, COLS, ROWS, BLOCK_SIZE);\n    const boundary = {\n      x: 0,\n      y: 0,\n      height: ROWS,\n      width: COLS\n    } as BoundarySetupModel;\n    this.bomb = new BombClass(this.gameService, this.ctx, boundary, 0);\n    this.bomb.move(this.bomb.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.top));\n    this.isAnimateOnce = true;\n    this.animate();\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.isAnimateOnce = !this.isAnimateOnce;\n    this.bomb.isDestroyed = false;\n    this.bomb.move(this.bomb.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.top));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.025);\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.draw();\n    this.bomb.animate(now);\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n\n  /**\n   * The keyEvent listener\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keydown', ['$event'])\n  keyEvent(event: KeyboardEvent) {\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.keyDownEvent,\n      stringData: event.code\n    } as ObservableModel);\n  }\n}\n","<div class=\"game-container\">\n  Bomb\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n  </div>\n</div>\n","/**\n * Columns\n */\nexport const COLS = 31;\n/**\n * Rows\n */\nexport const ROWS = 31;\n/**\n * Block Size\n */\nexport const BLOCK_SIZE = 25;\n\n/**\n * The #0 animation\n */\nconst ASSET_ANIMATION_0 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n];\n\n/**\n * The #1 animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n];\n\n/**\n * The #2 animation\n */\nconst ASSET_ANIMATION_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n];\n\n/**\n * The #3 animation\n */\nconst ASSET_ANIMATION_3 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n];\n\n/**\n * The #4 animation\n */\nconst ASSET_ANIMATION_4 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0]\n];\n\n/**\n * The #5 animation\n */\nconst ASSET_ANIMATION_5 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n];\n\n/**\n * The #6 animation\n */\nconst ASSET_ANIMATION_6 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n];\n\n/**\n * The #7 animation\n */\nconst ASSET_ANIMATION_7 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0]\n];\n\n/**\n * The #8 animation\n */\nconst ASSET_ANIMATION_8 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]\n];\n\n/**\n * The #9 animation\n */\nconst ASSET_ANIMATION_9 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 1, 1, 1, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [\n  ASSET_ANIMATION_0,\n  ASSET_ANIMATION_1,\n  ASSET_ANIMATION_2,\n  ASSET_ANIMATION_3,\n  ASSET_ANIMATION_4,\n  ASSET_ANIMATION_5,\n  ASSET_ANIMATION_6,\n  ASSET_ANIMATION_7,\n  ASSET_ANIMATION_8,\n  ASSET_ANIMATION_9\n];\n\n/**\n * The colors\n */\nexport const COLORS = [\n  'rgba(0,0, 0)', // Black\n  'rgba(73, 112, 79)', // Green\n  'rgba(139, 123, 92)' // Light Orange\n];\n","import { ASSET_ANIMATION, COLORS } from './number-constants';\nimport { GameService } from '../service/game.service';\nimport { AssetClass } from '../asset/asset.class';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\n\n/**\n * The Number Class\n */\nexport class NumberClass extends AssetClass {\n  /**\n   * The numbers\n   */\n  private numbers: number[];\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param color The Color of the numbers\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    private color: number\n  ) {\n    super(gameService, ctx, boundarySetup, 0);\n    this.numbers = [];\n  }\n\n  /**\n   * Spawn the bomb\n   */\n  protected override spawn(): void {\n    this.assetAnimation = ASSET_ANIMATION[0];\n    this.engineAnimation = [];\n    this.destructionAnimations = [];\n    super.spawn();\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.ctx.scale(2, 2);\n    this.drawNumber();\n    this.ctx.restore();\n  }\n\n  /**\n   * Draw the bomb\n   */\n  private drawNumber(): void {\n    let offset = 0;\n    this.ctx.fillStyle = COLORS[this.color];\n    this.numbers.map((scoreNumber: number) => {\n      this.assetAnimation = ASSET_ANIMATION[scoreNumber];\n\n      this.assetAnimation.forEach((row, y) => {\n        row.forEach((value, x) => {\n          if (value > 0) {\n            this.ctx.fillRect(x + offset, y, 1, 1);\n          }\n        });\n      });\n\n      offset += 10;\n    });\n  }\n\n  /**\n   * Pad the points\n   *\n   * @param points The points to pad\n   */\n  private padPoints(points: number): string {\n    let stringPoints = points.toString();\n    if (points < 10) {\n      stringPoints = `000${points}`;\n    } else if (points < 100) {\n      stringPoints = `00${points}`;\n    } else if (points < 1000) {\n      stringPoints = `0${points}`;\n    }\n\n    return stringPoints;\n  }\n\n  /**\n   * Set the Numbers\n   * @param inputNumber the number to display\n   */\n  public setNumber(inputNumber: number, isPadNumber = true): void {\n    const numbers = isPadNumber ? this.padPoints(inputNumber) : [inputNumber];\n    this.numbers = [];\n    for (const index of numbers) {\n      this.numbers.push(Number(index));\n    }\n  }\n\n  /**\n   * Animate the bomb\n   */\n  public animate(): void {\n    this.draw();\n  }\n}\n","import { GameService } from './game.service';\nimport { NumberClass } from '../number/number.class';\nimport { IAsset } from '../interface/asset.interface';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\n\n/**\n * The text service\n */\nexport class TextService {\n  /**\n   * The score\n   */\n  private scoreClass: NumberClass;\n\n  /**\n   * The high score\n   */\n  private highScoreClass: NumberClass;\n\n  /**\n   * If the score board is displayed\n   */\n  private isDisplayed: boolean;\n\n  /**\n   * The constructor\n   */\n  constructor(private gameService: GameService, private ctx: CanvasRenderingContext2D, boundary: BoundarySetupModel) {\n    this.scoreClass = new NumberClass(this.gameService, this.ctx, boundary, 1);\n\n    this.highScoreClass = new NumberClass(this.gameService, this.ctx, boundary, 2);\n\n    this.isDisplayed = true;\n\n    this.scoreClass.move({\n      x: 160,\n      y: 0\n    } as IAsset);\n\n    this.highScoreClass.move({\n      x: 20,\n      y: 0\n    } as IAsset);\n\n    this.gameService.getMasterObservable().subscribe((resultModel: ObservableModel) => {\n      if (resultModel.type === ObservableTypeEnum.displayScore) {\n        this.isDisplayed = resultModel.booleanData;\n      } else if (resultModel.type === ObservableTypeEnum.gameStarted) {\n        this.isDisplayed = true;\n      }\n    });\n  }\n\n  /**\n   * Initialize the text\n   *\n   */\n  public animate(): void {\n    if (!this.isDisplayed) {\n      return;\n    }\n    this.scoreClass.animate();\n    this.highScoreClass.animate();\n  }\n\n  /**\n   * Set the Score number\n   * @param points The points to set\n   */\n  public setScore(points: number): void {\n    this.scoreClass.setNumber(points);\n  }\n\n  /**\n   * Set the high Score\n   * @param points The points to set\n   */\n  public setHighScore(points: number): void {\n    this.highScoreClass.setNumber(points);\n  }\n\n  /**\n   * Display any text\n   *\n   * @param text The text to display\n   * @param fontColor  The font color\n   * @param leftOffset  the offset to center\n   */\n  displayText(text: string, fontColor: string, leftOffset: number): void {\n    const gameboard = this.gameService.getGameboard();\n    this.ctx.fillStyle = 'black';\n    const gameOverBoxWidth = 100;\n    const gameOverBoxHeight = 50;\n    const gameOverXCenter = (gameboard.width - gameOverBoxWidth) / 2;\n    const gameOverYCenter = (gameboard.height - gameOverBoxHeight) / 2;\n    this.ctx.fillRect(gameOverXCenter, gameOverYCenter, gameOverBoxWidth, gameOverBoxHeight);\n    this.ctx.font = '10px \"Press Start 2P\", cursive';\n    this.ctx.fillStyle = fontColor;\n    this.ctx.fillText(text, gameOverXCenter + leftOffset, gameOverYCenter + 30);\n  }\n}\n","import { Alien1Class } from '../aliens/alien-1/alien-1.class';\nimport { Alien2Class } from '../aliens/alien-2/alien-2.class';\nimport { Alien3Class } from '../aliens/alien-3/alien-3.class';\nimport { Alien4Class } from '../aliens/alien-4/alien-4.class';\nimport { Alien5Class } from '../aliens/alien-5/alien-5.class';\nimport { Alien6Class } from '../aliens/alien-6/alien-6.class';\nimport { AlienBoss2Class } from '../aliens/alien-boss-2/alien-boss-2.class';\nimport { AlienClass } from '../aliens/alien/alien.class';\nimport { AssetClass } from '../asset/asset.class';\nimport { AssetAlignVerticalEnum } from '../asset/enum/asset-align-vertical.enum';\nimport { AssetAlignEnum } from '../asset/enum/asset-align.enum';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { ALIEN_COLUMNS, ALIEN_ROWS } from '../gameboard/gameboard-constants';\nimport { IAsset } from '../interface/asset.interface';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\nimport { ObservableModel } from '../model/observable.model';\nimport { GameService } from './game.service';\n\n/**\n * The invasion service\n */\nexport class InvasionService extends AssetClass {\n  /**\n   * The alien boss\n   */\n  private alienBoss: AlienBoss2Class;\n  /**\n   * The aliens\n   */\n  private aliens: AlienClass[];\n  /**\n   * Alien Creep Moving Left\n   */\n  private isAlienCreepLeft: boolean;\n  /**\n   * The xAlienDelta movement\n   */\n  private xAlienDelta: number;\n  /**\n   * Is Bossing\n   */\n  private isBossing: boolean;\n  /**\n   * The timeout timer\n   */\n  private timerId: number;\n  /**\n   * The display timer elapse time\n   */\n  private displayElapseTime: number;\n  /**\n   * The game started\n   */\n  private isGameStarted: boolean;\n\n  /**\n   * The constructor\n   *\n   * @param gameService The GameService\n   * @param ctx The CTX\n   * @param boundarySetUp The Boundary Set up\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, boundary: BoundarySetupModel) {\n    super(gameService, ctx, boundary, 0);\n    this.aliens = [];\n    this.isAlienCreepLeft = true;\n    this.xAlienDelta = -10;\n    this.isBossing = false;\n    this.displayElapseTime = 0;\n    this.isGameStarted = false;\n\n    this.setup();\n\n    this.gameService.getMasterObservable().subscribe((resultModel: ObservableModel) => {\n      if (resultModel.type === ObservableTypeEnum.gameStarted) {\n        this.isGameStarted = resultModel.booleanData;\n        if (resultModel.booleanData === false) {\n          this.alienBoss.isDestroyed = true;\n          this.isBossing = false;\n        }\n      } else if (resultModel.type === ObservableTypeEnum.gamePaused && !resultModel.booleanData) {\n        this.setAlienBossDisplayElapseTime();\n      } else if (resultModel.type === ObservableTypeEnum.alienBossDestroyed) {\n        this.toggleScore(true);\n        this.isBossing = false;\n        this.alienBoss.isDestroyed = true;\n        this.setAlienBossDisplayElapseTime();\n      } else if (resultModel.type === ObservableTypeEnum.alienDestroyed) {\n        this.aliens[resultModel.numberData].isDestroyed = true;\n        this.aliens[resultModel.numberData].canFireWeapon = false;\n        this.findNextBombingAlien(resultModel.numberData);\n      }\n    });\n  }\n\n  /**\n   * Spawn the alien\n   */\n  protected override spawn(): void {\n    this.assetAnimation = [[0]];\n    this.engineAnimation = [];\n    super.spawn();\n  }\n\n  /**\n   * Initialize the board\n   */\n  private setup(): void {\n    let alienRowCounter = 0;\n\n    Array(ALIEN_ROWS)\n      .fill(0)\n      .map(() => {\n        Array(ALIEN_COLUMNS)\n          .fill(0)\n          .map(() => {\n            if (alienRowCounter === 1) {\n              this.aliens.push(new Alien2Class(this.gameService, this.ctx, this.boundarySetup, this.aliens.length));\n            } else if (alienRowCounter === 2) {\n              this.aliens.push(new Alien3Class(this.gameService, this.ctx, this.boundarySetup, this.aliens.length));\n            } else if (alienRowCounter === 3) {\n              this.aliens.push(new Alien4Class(this.gameService, this.ctx, this.boundarySetup, this.aliens.length));\n            } else if (alienRowCounter === 4) {\n              this.aliens.push(new Alien5Class(this.gameService, this.ctx, this.boundarySetup, this.aliens.length));\n            } else if (alienRowCounter === 5) {\n              this.aliens.push(new Alien6Class(this.gameService, this.ctx, this.boundarySetup, this.aliens.length));\n            } else {\n              this.aliens.push(new Alien1Class(this.gameService, this.ctx, this.boundarySetup, this.aliens.length));\n            }\n          });\n        alienRowCounter++;\n      });\n\n    this.alienBoss = new AlienBoss2Class(\n      this.gameService,\n      this.ctx,\n      {\n        x: this.boundarySetup.x - 15,\n        y: 0,\n        height: 20,\n        width: this.boundarySetup.width + 20\n      } as BoundarySetupModel,\n      0\n    );\n\n    this.aliens.push(this.alienBoss);\n  }\n\n  /**\n   * Toggle The Score\n   * @param displayScore To display or not dispaly\n   */\n  private toggleScore(displayScore: boolean): void {\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.displayScore,\n      booleanData: displayScore\n    } as ObservableModel);\n  }\n\n  /**\n   * Find the next alien that can bomb\n   *\n   * @param alienPosition The index of the alien\n   */\n  private findNextBombingAlien(alienPosition: number): void {\n    const alienColumnIndex = alienPosition % ALIEN_COLUMNS;\n\n    const startingPosition = this.aliens.length - 1 - (ALIEN_COLUMNS - alienColumnIndex);\n\n    for (let index = startingPosition; index > 0; index -= ALIEN_COLUMNS) {\n      if (!this.aliens[index].isDestroyed) {\n        this.aliens[index].canFireWeapon = true;\n        return;\n      }\n    }\n  }\n\n  /**\n   * Verify if the aliens are destroyed\n   */\n  aliensDestroyed(): boolean {\n    return this.getActiveAliens().length === 0;\n  }\n\n  /**\n   * Initialize the board\n   */\n  public setupInvasion(yStart: number): void {\n    const xStart = 60;\n    const xSpacer = 24;\n    const ySpacer = 20;\n    let xValue = 0;\n    let yValue = 0;\n\n    this.aliens.map((alien: AlienClass) => {\n      alien.isDestroyed = false;\n      alien.move({\n        x: xValue++ * xSpacer + xStart,\n        y: yValue * ySpacer + yStart\n      } as IAsset);\n\n      alien.canFireWeapon = false;\n\n      if (yValue === ALIEN_ROWS - 1) {\n        alien.canFireWeapon = true;\n      }\n\n      if (xValue % ALIEN_COLUMNS === 0) {\n        yValue++;\n        xValue = 0;\n      }\n    });\n\n    const asset = this.alienBoss.positionAsset(AssetAlignEnum.right, AssetAlignVerticalEnum.top);\n    this.alienBoss.move(asset);\n  }\n\n  /**\n   * The aliens have hit the bottom\n   */\n  public splat(): boolean {\n    let isGameOver = false;\n    this.aliens\n      .filter((alien: AlienClass) => !alien.isDestroyed)\n      .map((alien: AlienClass) => {\n        if (alien.y + alien.getAssetHeight() >= this.boundary.floor) {\n          isGameOver = true;\n        }\n      });\n\n    return isGameOver;\n  }\n\n  /**\n   * Get All Active Aliens\n   */\n  public getAllActiveAliens(): AlienClass[] {\n    return this.aliens.filter((alien: AlienClass) => alien.isDestroyed === false);\n  }\n\n  /**\n   * Get All Active Aliens\n   */\n  private getActiveAliens(): AlienClass[] {\n    return this.aliens.filter((alien: AlienClass) => alien.isDestroyed === false && alien.isAlien());\n  }\n\n  /**\n   * Get All Active Aliens\n   *\n   * @param creepSpeed The current creep speed\n   */\n  public increaseInvasionSpeed(creepSpeed: number): boolean {\n    const totalAliens = this.getActiveAliens().length;\n\n    if (totalAliens < 20 && totalAliens > 15 && creepSpeed < 2) {\n      return true;\n    } else if (totalAliens < 15 && totalAliens > 10 && creepSpeed < 3) {\n      return true;\n    } else if (totalAliens < 10 && totalAliens > 5 && creepSpeed < 4) {\n      return true;\n    } else if (totalAliens < 4 && totalAliens > 1 && creepSpeed < 5) {\n      return true;\n    } else if (totalAliens === 1 && creepSpeed < 6) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Drop All the aliens\n   */\n  private dropAliens(): void {\n    this.isAlienCreepLeft = !this.isAlienCreepLeft;\n    let lastAlien: AlienClass;\n    this.getActiveAliens().map((alien: AlienClass) => {\n      alien.move({\n        x: alien.x,\n        y: (alien.y += 10)\n      } as IAsset);\n      lastAlien = alien;\n    });\n\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.alienDrop,\n      numberData: lastAlien.y + lastAlien.getAssetHeight()\n    } as ObservableModel);\n  }\n\n  /**\n   * Move All the aliens\n   */\n  private moveAliens(): void {\n    let creepSucceeded = true;\n    this.getActiveAliens().map((alien: AlienClass) => {\n      creepSucceeded =\n        creepSucceeded &&\n        alien.creep({\n          x: alien.x + this.xAlienDelta,\n          y: alien.y\n        } as IAsset);\n    });\n\n    if (creepSucceeded) {\n      this.getActiveAliens().map((alien: AlienClass) => {\n        alien.move({\n          x: alien.x + this.xAlienDelta,\n          y: alien.y\n        } as IAsset);\n      });\n    } else {\n      this.dropAliens();\n    }\n\n    this.xAlienDelta = this.isAlienCreepLeft ? -10 : 10;\n  }\n\n  /**\n   * Animate the invasion\n   * @param now The current time\n   * @param creepSpeedLevel The current creep timer\n   */\n  public animate(now: number, creepSpeedLevel: number): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n\n    if (this.assetTimer.elapsed > creepSpeedLevel) {\n      this.assetTimer.start = now;\n      this.moveAliens();\n    }\n\n    if (this.isBossing) {\n      this.alienBoss.animate(now);\n    }\n\n    this.getActiveAliens().map((alien: AlienClass) => {\n      alien.animate(now);\n    });\n  }\n\n  /**\n   * Reset the Alien Creep\n   */\n  public resetAlienCreep(): void {\n    this.toggleScore(true);\n    this.isBossing = false;\n    this.xAlienDelta = -10;\n    this.isAlienCreepLeft = true;\n    this.setAlienBossDisplayElapseTime();\n  }\n\n  /**\n   * Set the display elapse time\n   */\n  private setAlienBossDisplayElapseTime(): void {\n    /* eslint-disable-next-line */\n    // @ts-ignore\n    clearTimeout(this.timerId);\n\n    if (!this.isGameStarted || this.isBossing) {\n      return;\n    }\n\n    this.displayElapseTime = Math.floor(Math.random() * 20000 + 1000);\n\n    this.timerId = window.setTimeout(() => {\n      this.isBossing = true;\n      this.toggleScore(false);\n      this.alienBoss.positionAlienBoss();\n    }, this.displayElapseTime);\n  }\n}\n","import { BoundarySetupModel } from '../model/boundary-set.model';\n\n/**\n * The Moon service\n */\nexport class MoonService {\n  /**\n   * the left boundary\n   */\n  private leftBoundary: number;\n  /**\n   * the right boundary\n   */\n  private rightBoundary: number;\n  /**\n   * the boundary stake size\n   */\n  private boundaryStakeWidth: number;\n  /**\n   * the boundary stake Height\n   */\n  private boundaryStakeHeight: number;\n  /**\n   * The constructor\n   *\n   * @param ctx The CTX\n   * @param boundarySetUp The Boundary Set up\n   */\n  constructor(private ctx: CanvasRenderingContext2D, private boundary: BoundarySetupModel) {\n    this.leftBoundary = this.boundary.x + 40;\n    this.rightBoundary = this.boundary.width - 80 + this.leftBoundary;\n    this.boundaryStakeWidth = 5;\n    this.boundaryStakeHeight = this.boundary.height / 2;\n  }\n\n  /**\n   * Draw the moon\n   */\n  drawTheMoon(): void {\n    this.ctx.fillStyle = 'rgba(34, 65, 4)';\n    this.ctx.fillRect(this.boundary.x, this.boundary.y, this.boundary.width, this.boundary.height);\n\n    this.ctx.fillStyle = 'rgba(8, 136, 23)'; //  Green\n    this.ctx.fillRect(\n      this.leftBoundary - this.boundaryStakeWidth,\n      this.boundary.y,\n      this.boundaryStakeWidth,\n      this.boundaryStakeHeight\n    );\n\n    this.ctx.fillStyle = 'rgba(200, 95, 36)'; // Light Orange\n    this.ctx.fillRect(this.rightBoundary, this.boundary.y, this.boundaryStakeWidth, this.boundaryStakeHeight);\n  }\n\n  /**\n   * Animate the invasion\n   */\n  public animate(): void {\n    this.drawTheMoon();\n  }\n\n  /**\n   * Get the moonTop\n   */\n  public getMoonTop(): number {\n    return this.boundary.y;\n  }\n\n  /**\n   * Get the left boundary\n   */\n  public getMoonLeftBoundary(): number {\n    return this.leftBoundary - 1;\n  }\n\n  /**\n   * Get the right boundary\n   */\n  public getMoonRightBoundary(): number {\n    return this.rightBoundary + 1;\n  }\n}\n","/**\n * Columns\n */\nexport const COLS = 31;\n/**\n * Rows\n */\nexport const ROWS = 31;\n/**\n * Block Size\n */\nexport const BLOCK_SIZE = 25;\n\n/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],\n  [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n\n/**\n * The colors\n */\nexport const COLORS = [\n  'none',\n  'rgba(223, 37, 28)' // Dark Orange\n];\n\n/**\n * The keys\n */\nexport class KEY {\n  /**\n   * up\n   */\n  static readonly DOWN = 'ArrowDown';\n}\n","import { ASSET_ANIMATION, COLORS } from './moon-defense-constants';\nimport { GameService } from '../service/game.service';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { ObservableModel } from '../model/observable.model';\nimport { AssetClass } from '../asset/asset.class';\nimport { IAsset } from '../interface/asset.interface';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\n\n/**\n * The Moon Defense Class\n */\nexport class MoonDefenseClass extends AssetClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the alien\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid);\n  }\n\n  /**\n   * Spawn the moonDefense\n   */\n  protected override spawn(): void {\n    this.restore();\n    super.spawn();\n  }\n\n  /**\n   * Restore the spawn\n   */\n  public override restore(): void {\n    this.assetAnimation = JSON.parse(JSON.stringify(ASSET_ANIMATION[0])) as number[][];\n    this.engineAnimation = [];\n\n    super.restore();\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.drawMoonDefense();\n    this.ctx.restore();\n  }\n\n  /**\n   * Draw the moonDefense\n   */\n  private drawMoonDefense(): void {\n    this.assetAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 0) {\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(x, y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * Is the moon defense hit\n   * @param bombAsset The Bomb Asset\n   */\n  isHitBomb(bombAsset: IAsset): void {\n    if (!this.isDestroyed) {\n      const defenseHit = this.gameService.isHit(\n        {\n          x: this.x,\n          y: this.y,\n          shape: this.shape\n        } as IAsset,\n        bombAsset\n      );\n\n      if (defenseHit) {\n        const assetX = Math.round(bombAsset.x - this.x);\n\n        let rowHit = -1;\n        for (let y = 0; y < this.getAssetHeight(); y++) {\n          if (this.assetAnimation[y][assetX] > 0) {\n            rowHit = y;\n            break;\n          }\n        }\n\n        for (let y = rowHit; y < rowHit + bombAsset.shape.length; y++) {\n          const row = this.assetAnimation[y];\n          if (row) {\n            const nextColumn = assetX + 1;\n            this.assetAnimation[y][assetX] = 0;\n            this.assetAnimation[y][nextColumn] = 0;\n            this.shape[y][assetX] = 0;\n            this.shape[y][nextColumn] = 0;\n          } else {\n            break;\n          }\n        }\n\n        bombAsset.isDestroyed = true;\n\n        let counter = 0;\n        this.assetAnimation.map((row) => {\n          row.map((value: number) => {\n            counter += value;\n          });\n        });\n\n        this.isDestroyed = counter === 0;\n      }\n    }\n  }\n\n  /**\n   * Is the defense hit by a missile\n   * @param missileAsset The Missile Asset\n   */\n  isHitMissile(missileAsset: IAsset): void {\n    if (!this.isDestroyed) {\n      const defenseHit = this.gameService.isHit(\n        {\n          x: this.x,\n          y: this.y,\n          shape: this.shape\n        } as IAsset,\n        missileAsset\n      );\n\n      if (defenseHit) {\n        const assetX = Math.round(missileAsset.x - this.x);\n\n        let rowHit = -1;\n        for (let y = this.getAssetHeight() - 1; y >= 0; y--) {\n          if (this.assetAnimation[y][assetX] > 0) {\n            rowHit = y;\n            break;\n          }\n        }\n\n        for (let y = rowHit; y > rowHit - missileAsset.shape.length; y--) {\n          const row = this.assetAnimation[y];\n          if (row) {\n            const nextColumn = assetX + 1;\n            this.assetAnimation[y][assetX] = 0;\n            this.assetAnimation[y][nextColumn] = 0;\n            this.shape[y][assetX] = 0;\n            this.shape[y][nextColumn] = 0;\n          } else {\n            break;\n          }\n        }\n\n        missileAsset.isDestroyed = true;\n\n        let counter = 0;\n        this.assetAnimation.map((row) => {\n          row.map((value: number) => {\n            counter += value;\n          });\n        });\n\n        this.isDestroyed = counter === 0;\n      }\n    }\n  }\n\n  /**\n   * Animate the moonDefense\n   */\n  public animate(): void {\n    if (this.isDestroyed || this.isGameOver) {\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.moonDefenseDestroyed,\n        numberData: this.uid\n      } as ObservableModel);\n      return;\n    }\n\n    this.draw();\n  }\n}\n","import { MoonDefenseClass } from '../moon-defense/moon-defense.class';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\nimport { GameService } from './game.service';\nimport { AssetAlignEnum } from '../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../asset/enum/asset-align-vertical.enum';\nimport { IAsset } from '../interface/asset.interface';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\n\n/**\n * The Moon Defense service\n */\nexport class MoonDefenseService {\n  /**\n   * The moon defense\n   */\n  private moonDefenses: MoonDefenseClass[];\n\n  /**\n   * The constructor\n   *\n   * @param gameService The GameService\n   * @param ctx The CTX\n   * @param boundarySetUp The Boundary Set up\n   */\n  constructor(\n    private gameService: GameService,\n    private ctx: CanvasRenderingContext2D,\n    private boundary: BoundarySetupModel\n  ) {\n    this.moonDefenses = [];\n\n    this.setUp();\n\n    this.gameService.getMasterObservable().subscribe((resultModel: ObservableModel) => {\n      if (resultModel.type === ObservableTypeEnum.moonDefenseDestroyed) {\n        this.moonDefenses[resultModel.numberData].isDestroyed = true;\n      } else if (resultModel.type === ObservableTypeEnum.alienDrop) {\n        this.aliensDestroyedMoonbase(resultModel.numberData);\n      }\n    });\n  }\n\n  /**\n   * Determine if the aliens have destroyed the moonbases\n   * @param alienYPosition The bottom Alien Y Position\n   */\n  private aliensDestroyedMoonbase(alienYPosition: number): void {\n    const moonbase = this.getActiveMoonBases().pop();\n    if (moonbase && alienYPosition > moonbase.y) {\n      this.getActiveMoonBases().map((moonDefense: MoonDefenseClass) => {\n        moonDefense.isDestroyed = true;\n      });\n    }\n  }\n\n  /**\n   * Set up the bases\n   */\n  private setUp(): void {\n    Array(3)\n      .fill(0)\n      .map(() => {\n        this.moonDefenses.push(\n          new MoonDefenseClass(this.gameService, this.ctx, this.boundary, this.moonDefenses.length)\n        );\n      });\n  }\n\n  /**\n   * Set up the bases\n   */\n  public setupMoonBase(isReset: boolean, spaceshipYPosition: number): void {\n    this.moonDefenses.map((moonDefense: MoonDefenseClass, index: number) => {\n      moonDefense.isDestroyed = false;\n      if (isReset) {\n        moonDefense.restore();\n      }\n\n      let moonAsset = moonDefense.positionAsset(AssetAlignEnum.leftFourth, AssetAlignVerticalEnum.middle);\n      if (index === 1) {\n        moonAsset = moonDefense.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle);\n      } else if (index === 2) {\n        moonAsset = moonDefense.positionAsset(AssetAlignEnum.rightFourth, AssetAlignVerticalEnum.middle);\n      }\n\n      moonDefense.move({\n        x: moonAsset.x,\n        y: spaceshipYPosition - moonDefense.getAssetHeight()\n      } as IAsset);\n    });\n  }\n\n  /**\n   * Get the Active Moon Bases\n   */\n  public getActiveMoonBases(): MoonDefenseClass[] {\n    return this.moonDefenses.filter((moonDefense: MoonDefenseClass) => !moonDefense.isDestroyed);\n  }\n\n  /**\n   * Animate the invasion\n   */\n  public animate(): void {\n    this.getActiveMoonBases().map((moonDefense: MoonDefenseClass) => {\n      moonDefense.animate();\n    });\n  }\n}\n","/**\n * The first animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0],\n  [0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0],\n  [0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0],\n  [0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0]\n];\n\n/**\n * The animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n","/**\n * Columns\n */\nexport const COLS = 31;\n/**\n * Rows\n */\nexport const ROWS = 31;\n/**\n * Block Size\n */\nexport const BLOCK_SIZE = 25;\n\n/**\n * The spaceship colors\n */\nexport const COLORS = [\n  'none',\n  'rgba(255, 132, 0)', // Orange\n  'rgba(255, 255, 0)', // Yellow\n  'rgba(255, 0, 0)', // Red\n  'rgba(255, 255, 255)', //  White\n  'rgba(8, 136, 23)' //  Green\n];\n\n/**\n * The keys\n */\nexport class KEY {\n  /**\n   * Space\n   */\n  static readonly SPACE = 'Space';\n  /**\n   * Left\n   */\n  static readonly LEFT = 'ArrowLeft';\n  /**\n   * Right\n   */\n  static readonly RIGHT = 'ArrowRight';\n}\n\n/**\n * The first destruction animation\n */\nconst DESTRUCTION_ANIMATION_1 = [\n  [2, 0, 0, 0, 0, 0, 0, 0, 0, 2],\n  [0, 2, 0, 0, 0, 0, 0, 0, 2, 0],\n  [0, 0, 2, 3, 2, 0, 2, 0, 0, 0],\n  [0, 0, 2, 0, 2, 2, 3, 2, 0, 0],\n  [0, 0, 0, 2, 3, 2, 2, 0, 0, 0],\n  [0, 0, 2, 3, 2, 2, 0, 2, 0, 0],\n  [0, 0, 2, 0, 2, 3, 2, 2, 0, 0],\n  [0, 2, 0, 0, 0, 0, 0, 0, 2, 0],\n  [2, 0, 0, 0, 0, 0, 0, 0, 0, 2]\n];\n\n/**\n * The second destruction animation\n */\nconst DESTRUCTION_ANIMATION_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 2, 0, 0, 0, 0, 2, 0, 0],\n  [0, 0, 0, 3, 0, 2, 3, 0, 0, 0],\n  [0, 0, 0, 0, 3, 0, 0, 0, 0, 0],\n  [0, 0, 0, 3, 0, 2, 2, 0, 0, 0],\n  [0, 0, 2, 0, 0, 0, 0, 2, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The third destruction animation\n */\nconst DESTRUCTION_ANIMATION_3 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 3, 0, 2, 0, 0, 0, 0],\n  [0, 0, 0, 0, 3, 0, 0, 0, 0, 0],\n  [0, 0, 0, 2, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The destruction animations\n */\nexport const DESTRUCTION_ANIMATION = [DESTRUCTION_ANIMATION_1, DESTRUCTION_ANIMATION_2, DESTRUCTION_ANIMATION_3];\n","import { AssetClass } from '../../asset/asset.class';\nimport { ObservableTypeEnum } from '../../enum/observable-type.enum';\nimport { IAsset } from '../../interface/asset.interface';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\nimport { ObservableModel } from '../../model/observable.model';\nimport { TimerModel } from '../../model/timer.model';\nimport { GameService } from '../../service/game.service';\nimport { COLORS, DESTRUCTION_ANIMATION, KEY } from './spaceship-constants';\n\n/**\n * The Spaceship Class\n */\nexport abstract class SpaceshipClass extends AssetClass {\n  /**\n   * moves\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private moves: { [key: string]: any } = {\n    [KEY.LEFT]: (asset: IAsset): IAsset => ({ ...asset, x: asset.x - 3 }),\n    [KEY.RIGHT]: (asset: IAsset): IAsset => ({ ...asset, x: asset.x + 3 }),\n    [KEY.SPACE]: true\n  };\n\n  /**\n   * If the missile has been fired\n   */\n  private missileFired: boolean;\n\n  /**\n   * The Missile Timer\n   */\n  private missileTimer: TimerModel;\n\n  /**\n   * The Key Down Interval\n   */\n  private keyDownInterval: number;\n\n  /**\n   * The current Key down\n   */\n  private currentKeyDown: string;\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    private isPrimary: boolean\n  ) {\n    super(gameService, ctx, boundarySetup, 0);\n\n    this.missileFired = false;\n    this.missileTimer = {\n      start: performance.now(),\n      elapsed: 0\n    } as TimerModel;\n  }\n\n  /**\n   * Key Down Move\n   * @param eventCode The event code\n   */\n  private keyDownMove(eventCode: string): void {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n    const asset = this.moves[eventCode](this) as IAsset;\n    if (this.gameService.valid(asset, this.boundary)) {\n      this.move(asset);\n    } else {\n      /* eslint-disable-next-line */\n      // @ts-ignore\n      clearInterval(this.keyDownInterval);\n      this.keyDownInterval = undefined;\n    }\n  }\n\n  /**\n   * Press Key Stroke\n   * @param event The Key event\n   */\n  protected override processKeyStroke(event: ObservableModel): void {\n    if (this.isPrimary) {\n      const eventCode = event.stringData;\n      const keyDown = event.type === ObservableTypeEnum.keyDownEvent;\n\n      /* eslint-disable-next-line */\n      // @ts-ignore\n      if (this.moves[eventCode]) {\n        // Get new state\n        if (eventCode === KEY.SPACE && keyDown) {\n          this.missileFired = true;\n        } else {\n          if ((keyDown && this.currentKeyDown !== eventCode) || (!keyDown && this.currentKeyDown === eventCode)) {\n            /* eslint-disable-next-line */\n            // @ts-ignore\n            clearInterval(this.keyDownInterval);\n            this.keyDownInterval = undefined;\n            this.currentKeyDown = undefined;\n          }\n\n          if (keyDown && this.currentKeyDown !== eventCode) {\n            this.currentKeyDown = eventCode;\n            this.keyDownMove(eventCode);\n            this.keyDownInterval = window.setInterval(() => {\n              this.keyDownMove(eventCode);\n            }, 50);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Spawn the spaceship\n   */\n  protected override spawn(): void {\n    this.assetAnimation = this.assetAnimations[0];\n    this.engineAnimation = this.engineAnimations[0];\n    this.destructionAnimations = DESTRUCTION_ANIMATION;\n    this.destructionAnimation = this.destructionAnimations[0];\n    super.spawn();\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.drawSpaceship();\n    this.drawEngine();\n    this.ctx.restore();\n  }\n\n  /**\n   * Draw the spaceship\n   */\n  private drawSpaceship(): void {\n    this.assetAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 0) {\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(x, y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * Draw the engine\n   */\n  private drawEngine(): void {\n    this.engineAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 0) {\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(this.x + this.engineXOffset + x, this.y + this.engineYOffset + y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * If the spaceship has been hit\n   * @param alienBombAsset The alien bomb asset\n   */\n  public isHit(alienBombAsset: IAsset): void {\n    if (!this.isDestroyed) {\n      this.isDestroyed = this.gameService.isHit(\n        {\n          x: this.x,\n          y: this.y,\n          shape: this.shape\n        } as IAsset,\n        alienBombAsset\n      );\n\n      if (this.isDestroyed) {\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.spaceshipDestroyed,\n          booleanData: true\n        } as ObservableModel);\n        alienBombAsset.isDestroyed = true;\n      }\n    }\n  }\n\n  /**\n   * Draw the alien\n   */\n  private drawSpaceshipDestruction(): void {\n    this.destructionAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 0) {\n          this.ctx.fillStyle = COLORS[value];\n          this.ctx.fillRect(this.x + x, this.y + y, 1, 1);\n        }\n      });\n    });\n  }\n\n  /**\n   * Animate the spaceship destruction\n   * @param now the current time\n   */\n  private destructionAnimate(now = 0): void {\n    this.ctx.clearRect(this.x - 10, this.y, this.getAssetWidth() + 20, this.getAssetHeight());\n    this.destructionTimer.elapsed = now - this.destructionTimer.start;\n\n    if (this.destructionAnimationCounter === this.destructionAnimations.length) {\n      cancelAnimationFrame(this.destructionRequestId);\n      return;\n    }\n\n    if (this.destructionTimer.elapsed > 50) {\n      this.destructionTimer.start = now;\n      this.destructionAnimation =\n        this.destructionAnimations[this.destructionAnimationCounter++ % this.destructionAnimations.length];\n    }\n\n    this.drawSpaceshipDestruction();\n    this.destructionRequestId = requestAnimationFrame(this.destructionAnimate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * Animate the spaceship\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.assetTimer.elapsed = now - this.assetTimer.start;\n    this.engineTimer.elapsed = now - this.engineTimer.start;\n    this.missileTimer.elapsed = now - this.missileTimer.start;\n\n    if (this.isDestroyed) {\n      this.destructionAnimate();\n      return;\n    }\n\n    this.destructionAnimationCounter = 0;\n\n    if (this.assetTimer.elapsed > 1000) {\n      this.assetTimer.start = now;\n      this.assetAnimation = this.assetAnimations[this.animationCounter++ % this.assetAnimations.length];\n    }\n\n    if (this.missileTimer.elapsed > 500 && this.missileFired) {\n      this.missileFired = false;\n      this.missileTimer.start = now;\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.missileShot,\n        assetCoordinateData: {\n          x: this.x + this.getAssetWidth() / 2 - 1,\n          y: this.y + 5\n        } as IAsset\n      } as ObservableModel);\n    }\n\n    if (this.engineTimer.elapsed > 200 && this.engineAnimations.length > 0) {\n      this.engineTimer.start = now;\n      this.engineAnimation = this.engineAnimations[this.engineAnimationCounter++ % this.engineAnimations.length];\n    }\n\n    this.draw();\n  }\n}\n","import { ASSET_ANIMATION } from './spaceship-2-constants';\nimport { GameService } from '../../service/game.service';\nimport { SpaceshipClass } from '../spaceship/spaceship.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Spaceship 2 Class\n */\nexport class Spaceship2Class extends SpaceshipClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param isPrimary if the ship is the primary ship\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    isPrimary: boolean\n  ) {\n    super(gameService, ctx, boundarySetup, isPrimary);\n  }\n\n  /**\n   * Spawn the spaceship\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    this.engineAnimations = [[]];\n    super.spawn();\n  }\n}\n","import { BoundarySetupModel } from '../model/boundary-set.model';\nimport { GameService } from './game.service';\nimport { AssetAlignEnum } from '../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../asset/enum/asset-align-vertical.enum';\nimport { IAsset } from '../interface/asset.interface';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { SpaceshipClass } from '../spaceships/spaceship/spaceship.class';\nimport { Spaceship2Class } from '../spaceships/spaceship-2/spaceship-2.class';\n\n/**\n * The Spaceship service\n */\nexport class SpaceshipService {\n  /**\n   * The Space ship\n   */\n  private spaceship: SpaceshipClass;\n  /**\n   * Extra Space ships\n   */\n  private spaceships: SpaceshipClass[];\n  /**\n   * The gameboard bottom\n   */\n  private gameboardBottom: number;\n\n  /**\n   * The constructor\n   *\n   * @param gameService The GameService\n   * @param ctx The CTX\n   * @param boundarySetUp The Boundary Set up\n   */\n  constructor(\n    private gameService: GameService,\n    private ctx: CanvasRenderingContext2D,\n    private boundary: BoundarySetupModel\n  ) {\n    this.spaceships = [];\n    this.gameboardBottom = this.gameService.getGameboard().height;\n\n    this.setUp();\n\n    this.gameService.getMasterObservable().subscribe((resultModel: ObservableModel) => {\n      if (resultModel.type === ObservableTypeEnum.spaceshipDestroyed) {\n        this.spaceship.isDestroyed = false;\n        this.removeSpaceshipReserve();\n      }\n    });\n  }\n\n  /**\n   * Set up the bases\n   */\n  private setUp(): void {\n    Array(2)\n      .fill(0)\n      .map(() => {\n        this.spaceships.unshift(new Spaceship2Class(this.gameService, this.ctx, this.boundary, false));\n      });\n\n    let extraLivesX = 10;\n\n    this.spaceships\n      .filter((spaceship: SpaceshipClass) => !spaceship.isDestroyed)\n      .map((spaceship: SpaceshipClass) => {\n        spaceship.move({\n          x: extraLivesX,\n          y: this.gameboardBottom - spaceship.getAssetHeight()\n        } as IAsset);\n        extraLivesX += 20;\n      });\n\n    this.spaceship = new Spaceship2Class(this.gameService, this.ctx, this.boundary, true);\n  }\n\n  /**\n   * Set up the spaceships\n   */\n  public setupSpaceships(): void {\n    this.spaceship.isDestroyed = false;\n    const spaceshipAsset = this.gameService.positionAsset(\n      this.spaceship,\n      AssetAlignEnum.center,\n      AssetAlignVerticalEnum.bottom\n    );\n    spaceshipAsset.y = this.boundary.height - this.spaceship.getAssetHeight();\n    this.spaceship.move(spaceshipAsset);\n\n    this.spaceships.map((spaceship: SpaceshipClass) => {\n      spaceship.isDestroyed = false;\n    });\n  }\n\n  /**\n   * Get the Spaceship Y Position\n   */\n  public getSpaceshipYPosition(): number {\n    return this.spaceship.y;\n  }\n\n  /**\n   * If the active spaceship is hit\n   */\n  public isHit(alienBombAsset: IAsset): void {\n    this.spaceship.isHit(alienBombAsset);\n  }\n\n  /**\n   * Get the active reserve spaceships\n   */\n  private getActiveSpaceshipReserves(): SpaceshipClass[] {\n    return this.spaceships.filter((spaceship: SpaceshipClass) => !spaceship.isDestroyed);\n  }\n\n  /**\n   * Remove a destroyed reserve spaceship\n   */\n  private removeSpaceshipReserve(): void {\n    const reserves = this.getActiveSpaceshipReserves();\n    if (reserves.length) {\n      reserves[reserves.length - 1].isDestroyed = true;\n    }\n  }\n\n  /**\n   * Animate the invasion\n   */\n  public animate(now = 0): void {\n    this.getActiveSpaceshipReserves().map((spaceship: SpaceshipClass) => {\n      spaceship.animate(now);\n    });\n\n    this.spaceship.animate(now);\n  }\n}\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [\n  [4, 4],\n  [4, 4],\n  [4, 4],\n  [4, 4],\n  [4, 4]\n];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n","/**\n * Columns\n */\nexport const COLS = 31;\n/**\n * Rows\n */\nexport const ROWS = 31;\n/**\n * Block Size\n */\nexport const BLOCK_SIZE = 25;\n\n/**\n * The colors\n */\nexport const COLORS = [\n  'none',\n  'rgba(255, 132, 0)', // Orange\n  'rgba(255, 255, 0)', // Yellow\n  'rgba(255, 0, 0)', // Red\n  'rgba(255, 255, 255)' //  White\n];\n\n/**\n * The keys\n */\nexport class KEY {\n  /**\n   * up\n   */\n  static readonly UP = 'ArrowUp';\n}\n","import { COLORS, KEY } from './missile-constants';\nimport { IAsset } from '../../interface/asset.interface';\nimport { GameService } from '../../service/game.service';\nimport { AssetClass } from '../../asset/asset.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Missile Class\n */\nexport abstract class MissileClass extends AssetClass {\n  /**\n   * The moves\n   */\n  private moves = {\n    [KEY.UP]: (asset: IAsset): IAsset => ({ ...asset, y: asset.y - 5 })\n  };\n\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the misssle\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid);\n  }\n\n  /**\n   * Spawn the missile\n   */\n  protected override spawn(): void {\n    this.assetAnimation = this.assetAnimations[0];\n    this.engineAnimation = this.engineAnimations[0];\n\n    super.spawn();\n  }\n\n  /**\n   * Draw evenything necessary\n   */\n  protected draw(): void {\n    this.ctx.save();\n    this.ctx.translate(this.x, this.y);\n    this.drawMissile();\n    this.drawEngine();\n    this.ctx.restore();\n  }\n\n  /**\n   * Draw the missile\n   */\n  private drawMissile() {\n    this.assetAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        this.ctx.fillStyle = COLORS[value];\n        this.ctx.fillRect(x, y, 1, 1);\n      });\n    });\n  }\n\n  /**\n   * Draw the engine\n   */\n  private drawEngine() {\n    this.engineAnimation.forEach((row, y) => {\n      row.forEach((value, x) => {\n        this.ctx.fillStyle = COLORS[value];\n        this.ctx.fillRect(this.x + this.engineXOffset + x, this.y + this.engineYOffset + y, 1, 1);\n      });\n    });\n  }\n\n  /**\n   * Animate the missile\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.engineTimer.elapsed = now - this.engineTimer.start;\n\n    if (this.engineTimer.elapsed > 30) {\n      this.engineTimer.start = now;\n      this.engineAnimation = this.engineAnimations[this.engineAnimationCounter++ % this.engineAnimations.length];\n      const asset = this.moves['ArrowUp'](this);\n      if (this.gameService.valid(asset, this.boundary)) {\n        this.move(asset);\n      } else {\n        this.isDestroyed = true;\n      }\n    }\n\n    this.draw();\n  }\n}\n","import { ASSET_ANIMATION } from './missile-2-constants';\nimport { GameService } from '../../service/game.service';\nimport { MissileClass } from '../missile/missile.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Missile 2 Class\n */\nexport class Missile2Class extends MissileClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the missle\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid);\n  }\n\n  /**\n   * Spawn the missile\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    this.engineAnimations = [[]];\n    super.spawn();\n  }\n}\n","import { GameService } from './game.service';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { Missile2Class } from '../missile/missile-2/missile-2.class';\nimport { MissileClass } from '../missile/missile/missile.class';\nimport { BombClass } from '../bomb/bomb.class';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\n\n/**\n * The projectile service\n */\nexport class ProjectileService {\n  /**\n   * The spaceship missiles\n   */\n  private spaceshipMissiles: MissileClass[];\n  /**\n   * The game is paused\n   */\n  private isGamePaused: boolean;\n  /**\n   * The alien bombs\n   */\n  private alienBombs: BombClass[];\n\n  /**\n   * The constructor\n   *\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundary The boundary setup model\n   */\n  constructor(\n    private gameService: GameService,\n    private ctx: CanvasRenderingContext2D,\n    private boundary: BoundarySetupModel\n  ) {\n    this.spaceshipMissiles = [];\n    this.alienBombs = [];\n    this.isGamePaused = false;\n\n    this.init();\n  }\n\n  /**\n   * Init the service with the listener\n   */\n  private init(): void {\n    this.gameService.getMasterObservable().subscribe((event: ObservableModel) => {\n      if (event.type === ObservableTypeEnum.missileShot) {\n        this.launchMissile(event);\n      } else if (event.type === ObservableTypeEnum.bombDropped) {\n        this.dropBomb(event);\n      } else if (event.type === ObservableTypeEnum.gamePaused) {\n        this.isGamePaused = event.booleanData;\n      }\n    });\n  }\n\n  /**\n   * Find any unused missiles\n   */\n  private findUnusedMissile(): MissileClass {\n    return this.spaceshipMissiles.filter((missile: MissileClass) => missile.isDestroyed)[0];\n  }\n\n  /**\n   * Find any unused bombs\n   */\n  private findUnusedBomb(): BombClass {\n    return this.alienBombs.filter((bomb: BombClass) => bomb.isDestroyed)[0];\n  }\n\n  /**\n   * Return all Active Missiles\n   */\n  public getActiveMissiles(): MissileClass[] {\n    return this.spaceshipMissiles.filter((missile: MissileClass) => !missile.isDestroyed);\n  }\n\n  /**\n   * Return all Active Missiles\n   */\n  public getActiveBombs(): BombClass[] {\n    return this.alienBombs.filter((bomb: BombClass) => !bomb.isDestroyed);\n  }\n\n  /**\n   * Remove all the projectiles\n   */\n  public removeProjectiles(): void {\n    this.getActiveMissiles().map((missile: MissileClass) => {\n      missile.isDestroyed = true;\n    });\n\n    this.getActiveBombs().map((bomb: BombClass) => {\n      bomb.isDestroyed = true;\n    });\n  }\n\n  /**\n   * Animate the missiles\n   * @param now  the current time stamp\n   */\n  animate(now = 0): void {\n    if (!this.isGamePaused) {\n      this.getActiveMissiles().map((missile: MissileClass) => {\n        missile.animate(now);\n      });\n\n      this.getActiveBombs().map((bomb: BombClass) => {\n        bomb.animate(now);\n      });\n    }\n  }\n\n  /**\n   * Launch a Missile\n   * @param event The event\n   */\n  private launchMissile(event: ObservableModel): void {\n    let missile = this.findUnusedMissile();\n    if (!missile) {\n      missile = new Missile2Class(this.gameService, this.ctx, this.boundary, this.spaceshipMissiles.length);\n      this.spaceshipMissiles.push(missile);\n    }\n    missile.isDestroyed = false;\n\n    missile.move(event.assetCoordinateData);\n  }\n\n  /**\n   * Drop a bomb\n   * @param event The event\n   */\n  private dropBomb(event: ObservableModel): void {\n    let bomb = this.findUnusedBomb();\n    if (!bomb) {\n      bomb = new BombClass(this.gameService, this.ctx, this.boundary, this.alienBombs.length);\n      this.alienBombs.push(bomb);\n    }\n    bomb.isDestroyed = false;\n\n    bomb.move(event.assetCoordinateData);\n  }\n}\n","import { Component, ViewChild, ElementRef, OnInit, HostListener } from '@angular/core';\nimport { COLS, BLOCK_SIZE, ROWS, LEVELSPEED, LEVELHEIGHT, MOON_HEIGHT } from './gameboard-constants';\nimport { GameService } from '../service/game.service';\nimport { MissileClass } from '../missile/missile/missile.class';\nimport { ObservableModel } from '../model/observable.model';\nimport { ObservableTypeEnum } from '../enum/observable-type.enum';\nimport { BombClass } from '../bomb/bomb.class';\nimport { MoonDefenseClass } from '../moon-defense/moon-defense.class';\nimport { BoundarySetupModel } from '../model/boundary-set.model';\nimport { TextService } from '../service/text.service';\nimport { GameCookieService } from '../service/game-cookie.service';\nimport { GameDataModel } from '../model/game-data.model';\nimport { InvasionService } from '../service/invasion.service';\nimport { AlienClass } from '../aliens/alien/alien.class';\nimport { MoonService } from '../service/moon.service';\nimport { MoonDefenseService } from '../service/moon-defense.service';\nimport { SpaceshipService } from '../service/spaceship.service';\nimport { ProjectileService } from '../service/projectile.service';\n\n/**\n * The Gameboard Component\n */\n@Component({\n  selector: 'bp-gameboard',\n  templateUrl: './gameboard.component.html',\n  styleUrls: ['./gameboard.component.scss', '../font/press-start-2p.scss']\n})\nexport class GameboardComponent implements OnInit {\n  /**\n   * Display Grid\n   */\n  private isDisplayGrid = false;\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n  /**\n   * Canvas Rendering Context 2D\n   */\n  private ctx: CanvasRenderingContext2D;\n  /**\n   * The animation request id\n   */\n  private requestId: number;\n  /**\n   * The points\n   */\n  private points: number;\n  /**\n   * The highscore\n   */\n  private highScore: number;\n  /**\n   * The Level Display\n   */\n  levelDisplay: string;\n  /**\n   * The Game Level\n   */\n  gameLevel: number;\n  /**\n   * If the game is ovewr\n   */\n  private isGameOver: boolean;\n  /**\n   * The creep speed level\n   */\n  private creepSpeedLevel: number;\n  /**\n   * The creep speed\n   */\n  private creepSpeed: number;\n  /**\n   * The creep level\n   */\n  private creepLevel: number;\n  /**\n   * Paused\n   */\n  private isGamePaused: boolean;\n  /**\n   * Game Started;\n   */\n  public gameStarted: boolean;\n  /**\n   * lives\n   */\n  private lives: number;\n  /**\n   * text class\n   */\n  private textService: TextService;\n  /**\n   * Invasion Service\n   */\n  private invasionService: InvasionService;\n  /**\n   * Moon Service\n   */\n  private moonService: MoonService;\n  /**\n   * Moon Defense Service\n   */\n  private moonDefenseService: MoonDefenseService;\n  /**\n   * Spaceship Service\n   */\n  private spaceshipService: SpaceshipService;\n  /**\n   * Projectile Service\n   */\n  private projectileService: ProjectileService;\n\n  /**\n   * The Constructor\n   *\n   * @param gameCookieService The Game Cookie Service from DI\n   * @param gameService The Game Service from DI\n   */\n  constructor(private gameCookieService: GameCookieService, private gameService: GameService) {\n    const gameData = this.gameCookieService.getGameData();\n    this.highScore = gameData.highScore;\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.gameStarted = false;\n    this.ctx = this.gameService.initBoard(this.canvas, COLS, ROWS, BLOCK_SIZE);\n\n    this.moonService = new MoonService(this.ctx, {\n      x: 0,\n      y: ROWS - MOON_HEIGHT * 2,\n      height: MOON_HEIGHT,\n      width: COLS\n    } as BoundarySetupModel);\n\n    this.spaceshipService = new SpaceshipService(this.gameService, this.ctx, {\n      x: this.moonService.getMoonLeftBoundary(),\n      y: 0,\n      height: this.moonService.getMoonTop(),\n      width: this.moonService.getMoonRightBoundary()\n    } as BoundarySetupModel);\n\n    const boundary = {\n      x: 0,\n      y: 0,\n      height: this.moonService.getMoonTop(),\n      width: COLS\n    } as BoundarySetupModel;\n\n    this.moonDefenseService = new MoonDefenseService(this.gameService, this.ctx, boundary);\n\n    this.projectileService = new ProjectileService(this.gameService, this.ctx, boundary);\n\n    this.textService = new TextService(this.gameService, this.ctx, {\n      x: 0,\n      y: 0,\n      height: LEVELHEIGHT[0],\n      width: COLS\n    } as BoundarySetupModel);\n\n    this.invasionService = new InvasionService(this.gameService, this.ctx, {\n      x: 0,\n      y: 0,\n      height: this.moonService.getMoonTop(),\n      width: COLS\n    } as BoundarySetupModel);\n\n    this.gameService.getMasterObservable().subscribe((resultModel: ObservableModel) => {\n      if (resultModel.type === ObservableTypeEnum.alienBossDestroyed) {\n        this.calculateScore(resultModel.pointData);\n      } else if (resultModel.type === ObservableTypeEnum.alienDestroyed) {\n        this.calculateScore(resultModel.pointData);\n        if (this.invasionService.aliensDestroyed()) {\n          setTimeout(() => {\n            this.nextLevel();\n          }, 1000);\n        }\n      } else if (resultModel.type === ObservableTypeEnum.spaceshipDestroyed) {\n        this.gameOver(false);\n      }\n    });\n\n    this.resetGame();\n    this.startAllAnimation();\n  }\n\n  /**\n   * Evaluate the score\n   *\n   * @param score The current score\n   */\n  private calculateScore(score: number): void {\n    this.points += score;\n    if (this.points > this.highScore) {\n      this.highScore = this.points;\n      this.textService.setHighScore(this.highScore);\n    }\n    this.textService.setScore(this.points);\n  }\n\n  /**\n   * Set the initial game board\n   *\n   * @param isReset if the game is reseting\n   */\n  private setGameBoard(isReset: boolean): void {\n    /* eslint-disable-next-line */\n    // @ts-ignore\n    this.invasionService.setupInvasion(LEVELHEIGHT[this.creepLevel] as number);\n    this.spaceshipService.setupSpaceships();\n    this.moonDefenseService.setupMoonBase(isReset, this.spaceshipService.getSpaceshipYPosition());\n  }\n\n  /**\n   * Pad the level\n   *\n   */\n  /*\n  private padLevel(): string {\n    if (this.gameLevel < 10) {\n      return `L0${this.gameLevel}`;\n    }\n\n    return `L${this.gameLevel.toString()}`;\n  }\n  */\n\n  /**\n   * The aliens have hit the bottom\n   */\n  private splat(): void {\n    if (this.invasionService.splat()) {\n      this.gameOver(true);\n    }\n  }\n\n  /**\n   * Evaluate any damage\n   */\n  private evaluateDamage(): void {\n    this.projectileService.getActiveBombs().map((bomb: BombClass) => {\n      this.spaceshipService.isHit(bomb);\n      this.moonDefenseService.getActiveMoonBases().map((moonDefense: MoonDefenseClass) => {\n        moonDefense.isHitBomb(bomb);\n      });\n    });\n\n    this.projectileService.getActiveMissiles().map((missile: MissileClass) => {\n      this.invasionService.getAllActiveAliens().map((alien: AlienClass) => {\n        alien.isHit(missile);\n      });\n\n      this.moonDefenseService.getActiveMoonBases().map((moonDefense: MoonDefenseClass) => {\n        moonDefense.isHitMissile(missile);\n      });\n    });\n\n    if (this.invasionService.increaseInvasionSpeed(this.creepSpeed)) {\n      /* eslint-disable-next-line */\n      // @ts-ignore\n      this.creepSpeedLevel = LEVELSPEED[this.creepSpeed++] as number;\n    }\n  }\n\n  /**\n   * Start All the animation in one place\n   */\n  private startAllAnimation(): void {\n    this.draw();\n\n    this.invasionService.animate(0, 1);\n\n    this.moonDefenseService.animate();\n\n    this.spaceshipService.animate();\n\n    this.textService.animate();\n  }\n\n  /**\n   * Animate\n   *\n   * @param now The current animation time\n   */\n  private animate(now = 0): void {\n    this.evaluateDamage();\n\n    this.splat();\n\n    if (this.isGameOver || this.isGamePaused) {\n      return;\n    }\n\n    this.draw();\n\n    this.invasionService.animate(now, this.creepSpeedLevel);\n\n    this.moonDefenseService.animate();\n\n    this.projectileService.animate(now);\n\n    this.spaceshipService.animate(now);\n\n    this.textService.animate();\n\n    this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n  }\n\n  /**\n   * life lost\n   */\n  private lifeLost(): void {\n    this.pauseGame('READY ?', 17);\n\n    setTimeout(() => {\n      /**\n       * TODO\n       * this.isBossing = false;\n       * Associated with the spaceshipDestroyed\n       */\n      this.removeWeapons();\n\n      this.pauseGame('', 0);\n    }, 2000);\n  }\n\n  /**\n   * Determine if the game is over\n   *\n   * @param isReset If this is a reset\n   */\n  gameOver(isReset = false): void {\n    this.lives += isReset ? 3 : 1;\n\n    if (this.points >= this.highScore) {\n      this.gameCookieService.setGameData({\n        highScore: this.highScore\n      } as GameDataModel);\n    }\n\n    if (this.lives < 3) {\n      this.lifeLost();\n    } else {\n      this.removeWeapons();\n\n      setTimeout(() => {\n        this.isGameOver = true;\n        this.gameStarted = false;\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.gameStarted,\n          booleanData: false\n        } as ObservableModel);\n        cancelAnimationFrame(this.requestId);\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.gameOver,\n          booleanData: true\n        } as ObservableModel);\n        this.textService.displayText('GAME OVER', 'red', 5);\n      }, 250);\n    }\n  }\n\n  /**\n   * Draw the board\n   */\n  draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    if (this.isDisplayGrid) {\n      this.gameService.addOutlines(this.ctx, 20, 0.2);\n    }\n    this.moonService.animate();\n  }\n\n  /**\n   * Abstract event handlers\n   * @param type The input type\n   * @param code The key code\n   */\n  private handleEventListeners(type: ObservableTypeEnum, code: string): void {\n    if (this.gameStarted && !this.isGamePaused) {\n      this.gameService.emitMasterObservableEvent({\n        type,\n        stringData: code\n      } as ObservableModel);\n    }\n  }\n\n  /**\n   * The keyEvent down listener\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keydown', ['$event'])\n  keyDownEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.handleEventListeners(ObservableTypeEnum.keyDownEvent, event.code);\n  }\n\n  /**\n   * The keyEvent uplistener\n   *\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keyup', ['$event'])\n  keyUpEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.handleEventListeners(ObservableTypeEnum.keyUpEvent, event.code);\n  }\n\n  /**\n   * Play the game\n   */\n  play() {\n    this.gameStarted = true;\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.gameStarted,\n      booleanData: true\n    } as ObservableModel);\n\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.gameOver,\n      booleanData: false\n    } as ObservableModel);\n\n    this.resetGame();\n\n    // If we have an old game running a game then cancel the old\n    if (this.requestId) {\n      cancelAnimationFrame(this.requestId);\n    }\n\n    this.animate();\n  }\n\n  /**\n   * New Level Set-up\n   *\n   * @param isReset If the game is reseting\n   */\n  private newLevelSetup(isReset = false): void {\n    if (this.creepLevel < 8) {\n      this.creepLevel++;\n    }\n\n    this.creepSpeed = 0;\n    /* eslint-disable-next-line */\n    // @ts-ignore\n    this.creepSpeedLevel = LEVELSPEED[this.creepSpeed++] as number;\n\n    // this.levelDisplay = this.padLevel();\n\n    this.invasionService.resetAlienCreep();\n\n    this.setGameBoard(isReset);\n\n    if (this.creepLevel > 4) {\n      this.gameService.emitMasterObservableEvent({\n        type: ObservableTypeEnum.alienDrop,\n        numberData: ROWS * BLOCK_SIZE\n      } as ObservableModel);\n    }\n  }\n\n  /**\n   * Remove all the weapons\n   */\n  private removeWeapons(): void {\n    this.projectileService.removeProjectiles();\n  }\n\n  /**\n   * next level\n   */\n  private nextLevel(): void {\n    this.gameLevel++;\n    this.pauseGame('LEVEL UP', 12);\n\n    setTimeout(() => {\n      this.removeWeapons();\n\n      this.newLevelSetup();\n      this.pauseGame('', 0);\n    }, 2000);\n  }\n\n  /**\n   * Reset the Game\n   */\n  resetGame() {\n    this.lives = 0;\n    this.creepLevel = -1;\n    this.points = 0;\n    this.gameLevel = 1;\n    this.textService.setScore(this.points);\n    this.textService.setHighScore(this.highScore);\n    this.isGameOver = false;\n    this.isGamePaused = false;\n    this.spaceshipService.setupSpaceships();\n\n    this.newLevelSetup(true);\n  }\n\n  /**\n   * Pause the game\n   *\n   * @param text  The text to display\n   * @param index The text offset\n   */\n  private pauseGame(text: string, textOffset: number): void {\n    if (this.gameStarted) {\n      this.isGamePaused = !this.isGamePaused;\n      if (this.isGamePaused) {\n        cancelAnimationFrame(this.requestId);\n        this.textService.displayText(text, 'white', textOffset);\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.gamePaused,\n          booleanData: true\n        } as ObservableModel);\n      } else {\n        this.gameService.emitMasterObservableEvent({\n          type: ObservableTypeEnum.gamePaused,\n          booleanData: false\n        } as ObservableModel);\n        this.animate();\n      }\n    }\n  }\n\n  /**\n   * Pause the game\n   */\n  pause() {\n    this.pauseGame('PAUSED', 20);\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"play()\" class=\"play-button button\" *ngIf=\"!gameStarted\">Play</button>\n    <button (click)=\"gameOver(true)\" class=\"reset-button button\" *ngIf=\"gameStarted\">Reset</button>\n    <button (click)=\"pause()\" class=\"pause-button button\" [class.button-disabled]=\"!gameStarted\">Pause</button>\n  </div>\n</div>\n","/**\n * The first asset animation\n */\nconst ASSET_ANIMATION_1 = [[4], [4], [4]];\n\n/**\n * The asset animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n\n/**\n * The first engine animation\n */\nconst ENGINE_ANIMATION_1 = [[1]];\n\n/**\n * The second engine animation\n */\nconst ENGINE_ANIMATION_2 = [[2]];\n\n/**\n * The third engine animation\n */\nconst ENGINE_ANIMATION_3 = [[3]];\n\n/**\n * The engine animations\n */\nexport const ENGINE_ANIMATION = [ENGINE_ANIMATION_1, ENGINE_ANIMATION_2, ENGINE_ANIMATION_3];\n","import { ASSET_ANIMATION, ENGINE_ANIMATION } from './missile-1-constants';\nimport { GameService } from '../../service/game.service';\nimport { MissileClass } from '../missile/missile.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Missile 1 Class\n */\nexport class Missile1Class extends MissileClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   * @param guid The guid of the missle\n   */\n  constructor(\n    gameService: GameService,\n    ctx: CanvasRenderingContext2D,\n    boundarySetup: BoundarySetupModel,\n    guid: number\n  ) {\n    super(gameService, ctx, boundarySetup, guid);\n  }\n\n  /**\n   * Spawn the missile\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    this.engineAnimations = ENGINE_ANIMATION;\n    super.spawn();\n  }\n}\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { BLOCK_SIZE, COLS, ROWS } from '../missile-constants';\nimport { GameService } from '../../../service/game.service';\nimport { AssetAlignEnum } from '../../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../../asset/enum/asset-align-vertical.enum';\nimport { Missile1Class } from '../../missile-1/missile-1.class';\nimport { BoundarySetupModel } from '../../../model/boundary-set.model';\n\n/**\n * The Missile Component\n */\n@Component({\n  selector: 'bp-missile',\n  templateUrl: './missile.component.html',\n  styleUrls: ['./missile.component.scss']\n})\nexport class MissileComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * request\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * The missile\n   */\n  private missile: Missile1Class;\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {}\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.ctx = this.gameService.initBoard(this.canvas, COLS, ROWS, BLOCK_SIZE);\n    const boundary = {\n      x: 0,\n      y: 0,\n      height: ROWS,\n      width: COLS\n    } as BoundarySetupModel;\n    this.missile = new Missile1Class(this.gameService, this.ctx, boundary, 0);\n    this.missile.move(this.missile.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.bottom));\n    this.isAnimateOnce = true;\n    this.animate();\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.isAnimateOnce = !this.isAnimateOnce;\n    this.missile.isDestroyed = false;\n    this.missile.move(this.missile.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.025);\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.draw();\n    this.missile.animate(now);\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n}\n","<div class=\"game-container\">\n  Missile\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { BLOCK_SIZE, COLS, ROWS } from '../moon-defense-constants';\nimport { MoonDefenseClass } from '../moon-defense.class';\nimport { GameService } from '../../service/game.service';\nimport { AssetAlignEnum } from '../../asset/enum/asset-align.enum';\nimport { AssetAlignVerticalEnum } from '../../asset/enum/asset-align-vertical.enum';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Bomb Component\n */\n@Component({\n  selector: 'bp-moon-defense',\n  templateUrl: './moon-defense.component.html',\n  styleUrls: ['./moon-defense.component.scss']\n})\nexport class MoonDefenseComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * The defense\n   */\n  private defense: MoonDefenseClass;\n\n  /**\n   * requestI\n   */\n  private requestId: number;\n\n  /**\n   * request\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   */\n  constructor(private gameService: GameService) {}\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.ctx = this.gameService.initBoard(this.canvas, COLS, ROWS, BLOCK_SIZE);\n    const boundary = {\n      x: 0,\n      y: 0,\n      height: ROWS,\n      width: COLS\n    } as BoundarySetupModel;\n    this.defense = new MoonDefenseClass(this.gameService, this.ctx, boundary, 0);\n    this.defense.move(this.defense.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    this.isAnimateOnce = true;\n    this.animate();\n    this.defense.isAnimateOnce = true;\n    this.defense.animate();\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.isAnimateOnce = !this.isAnimateOnce;\n    this.defense.isAnimateOnce = this.isAnimateOnce;\n    this.defense.isDestroyed = false;\n    this.defense.move(this.defense.positionAsset(AssetAlignEnum.center, AssetAlignVerticalEnum.middle));\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n    this.defense.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.025);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Moon Defense</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n  </div>\n</div>\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\n\nimport { GameService } from '../../service/game.service';\nimport { AssetConfigurationModel } from '../../model/asset-configuration.model';\nimport { NumberClass } from '../number.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\nimport { GameCookieService } from '../../service/game-cookie.service';\nimport { DebugDataModel } from '../../model/debug-data.model';\n\n/**\n * The Alien Component\n */\n@Component({\n  selector: 'bp-number',\n  templateUrl: './number.component.html',\n  styleUrls: ['./number.component.scss']\n})\nexport class NumberComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * request Id\n   */\n  private requestId: number;\n\n  /**\n   * request\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * The alien\n   */\n  private number: NumberClass;\n\n  /**\n   * Debug Assets\n   */\n  public assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   * @param gameCookie The Game Cookie Service\n   */\n  constructor(private gameService: GameService, private gameCookieService: GameCookieService) {\n    this.assets = [\n      {\n        key: 'zero',\n        name: '0'\n      } as AssetConfigurationModel,\n      {\n        key: 'one',\n        name: '1'\n      } as AssetConfigurationModel,\n      {\n        key: 'two',\n        name: '2'\n      } as AssetConfigurationModel,\n      {\n        key: 'three',\n        name: '3'\n      } as AssetConfigurationModel,\n      {\n        key: 'four',\n        name: '4'\n      } as AssetConfigurationModel,\n      {\n        key: 'five',\n        name: '5'\n      } as AssetConfigurationModel,\n      {\n        key: 'six',\n        name: '6'\n      } as AssetConfigurationModel,\n      {\n        key: 'seven',\n        name: '7'\n      } as AssetConfigurationModel,\n      {\n        key: 'eight',\n        name: '8'\n      } as AssetConfigurationModel,\n      {\n        key: 'nine',\n        name: '9'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 20;\n    const columns = 20;\n    this.ctx = this.gameService.initBoard(this.canvas, rows, columns, 25);\n    this.addNumber({\n      x: 0,\n      y: 0,\n      height: rows,\n      width: columns\n    } as BoundarySetupModel);\n    this.isAnimateOnce = true;\n\n    this.toggleAssets(this.gameCookieService.getSecondaryDebugData());\n    this.animate();\n  }\n\n  /**\n   * Add the aliens\n   */\n  private addNumber(boundary: BoundarySetupModel): void {\n    const number = new NumberClass(this.gameService, this.ctx, boundary, 1);\n    number.setNumber(0, false);\n    number.isDestroyed = true;\n    number.isAnimateOnce = true;\n\n    this.number = number;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.number.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 5, 0.025);\n  }\n\n  /**\n   * Animate\n   */\n  public animate(): void {\n    this.draw();\n    this.number.animate();\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.draw();\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        this.number.setNumber($index, false);\n        this.gameCookieService.setDebugData({\n          secondaryAssetName: key\n        } as DebugDataModel);\n      }\n    });\n\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Numbers</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","/**\n * The first animation\n */\nconst ASSET_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 1, 0, 0, 4, 4, 4, 0, 0, 1, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 4, 0, 4, 4, 3, 4, 4, 0, 4, 0, 0, 0, 0, 0],\n  [0, 0, 1, 0, 0, 4, 4, 4, 3, 3, 3, 4, 4, 4, 0, 0, 1, 0, 0],\n  [0, 0, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 0, 0],\n  [0, 0, 4, 4, 4, 0, 4, 0, 4, 4, 4, 0, 4, 0, 4, 4, 4, 0, 0],\n  [0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0]\n];\n\n/**\n * The animation array\n */\nexport const ASSET_ANIMATION = [ASSET_ANIMATION_1];\n\n/**\n * The first engine animation\n */\nconst ENGINE_ANIMATION_1 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The second engine animation\n */\nconst ENGINE_ANIMATION_2 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The third engine animation\n */\nconst ENGINE_ANIMATION_3 = [\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n  [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n];\n\n/**\n * The engine animations\n */\nexport const ENGINE_ANIMATION = [ENGINE_ANIMATION_1, ENGINE_ANIMATION_2, ENGINE_ANIMATION_3];\n","import { ASSET_ANIMATION, ENGINE_ANIMATION } from './spaceship-1-constants';\nimport { GameService } from '../../service/game.service';\nimport { SpaceshipClass } from '../spaceship/spaceship.class';\nimport { BoundarySetupModel } from '../../model/boundary-set.model';\n\n/**\n * The Spaceship 1 Class\n */\nexport class Spaceship1Class extends SpaceshipClass {\n  /**\n   * Constructor\n   * @param gameService The GameService\n   * @param ctx The ctx\n   * @param boundarySetup The BoundarySetupModel\n   */\n  constructor(gameService: GameService, ctx: CanvasRenderingContext2D, boundarySetup: BoundarySetupModel) {\n    super(gameService, ctx, boundarySetup, true);\n  }\n\n  /**\n   * Spawn the spaceship\n   */\n  protected override spawn(): void {\n    this.assetAnimations = ASSET_ANIMATION;\n    this.engineAnimations = ENGINE_ANIMATION;\n    super.spawn();\n  }\n}\n","import { Component, OnInit, ElementRef, ViewChild, HostListener } from '@angular/core';\n\nimport { Spaceship1Class } from '../../spaceship-1/spaceship-1.class';\nimport { GameService } from '../../../service/game.service';\nimport { ObservableModel } from '../../../model/observable.model';\nimport { ObservableTypeEnum } from '../../../enum/observable-type.enum';\nimport { BoundarySetupModel } from '../../../model/boundary-set.model';\nimport { AssetConfigurationModel } from '../../../model/asset-configuration.model';\nimport { SpaceshipClass } from '../spaceship.class';\nimport { Spaceship2Class } from '../../spaceship-2/spaceship-2.class';\nimport { GameCookieService } from '../../../service/game-cookie.service';\nimport { DebugDataModel } from '../../../model/debug-data.model';\n\n/**\n * The Spaceship Component Two\n */\n@Component({\n  selector: 'bp-spaceship',\n  templateUrl: './spaceship.component.html',\n  styleUrls: ['./spaceship.component.scss']\n})\nexport class SpaceshipComponent implements OnInit {\n  /**\n   * The canvas\n   */\n  @ViewChild('board', { static: true })\n  canvas: ElementRef<HTMLCanvasElement>;\n\n  /**\n   * CTS\n   */\n  private ctx: CanvasRenderingContext2D;\n\n  /**\n   * requestId\n   */\n  private requestId: number;\n\n  /**\n   * Spaceships\n   */\n  private spaceships: SpaceshipClass[];\n\n  /**\n   * request\n   */\n  private isAnimateOnce: boolean;\n\n  /**\n   * The spaceship\n   */\n  private spaceship: SpaceshipClass;\n\n  /**\n   * Debug Assets\n   */\n  assets: AssetConfigurationModel[];\n\n  /**\n   * The Constructor\n   * @param gameService The GameService from DI\n   * @param gameCookie The Game Cookie Service\n   */\n  constructor(private gameService: GameService, private gameCookieService: GameCookieService) {\n    this.isAnimateOnce = false;\n    this.assets = [\n      {\n        key: 'spaceship1',\n        name: 'S-1'\n      } as AssetConfigurationModel,\n      {\n        key: 'spaceship2',\n        name: 'S-2'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    const rows = 20;\n    const columns = 20;\n    this.ctx = this.gameService.initBoard(this.canvas, columns, rows, 25);\n    this.addSpaceships({\n      x: 0,\n      y: 0,\n      height: rows,\n      width: columns\n    } as BoundarySetupModel);\n    this.isAnimateOnce = true;\n    this.toggleAssets(this.gameCookieService.getSecondaryDebugData());\n    this.animate();\n  }\n\n  /**\n   * Add the spaceships\n   */\n  private addSpaceships(boundary: BoundarySetupModel): void {\n    this.spaceships = [];\n\n    const spaceship1 = new Spaceship1Class(this.gameService, this.ctx, boundary);\n    spaceship1.isDestroyed = true;\n    this.spaceships.push(spaceship1);\n\n    const spaceship2 = new Spaceship2Class(this.gameService, this.ctx, boundary, true);\n    spaceship2.isDestroyed = true;\n    this.spaceships.push(spaceship2);\n\n    this.spaceship = this.spaceships[0];\n    this.spaceship.isAnimateOnce = true;\n    this.spaceship.isDestroyed = false;\n  }\n\n  /**\n   * Animate the object once\n   */\n  animateAsset(): void {\n    this.isAnimateOnce = !this.isAnimateOnce;\n    this.spaceship.isDestroyed = false;\n    cancelAnimationFrame(this.requestId);\n    this.animate();\n  }\n\n  /**\n   * Draw the board\n   */\n  private draw() {\n    this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n    this.gameService.addOutlines(this.ctx, 1, 0.1);\n  }\n\n  /**\n   * Animate\n   * @param now the current time\n   */\n  public animate(now = 0): void {\n    this.draw();\n    this.spaceship.animate(now);\n    if (!this.isAnimateOnce) {\n      this.requestId = requestAnimationFrame(this.animate.bind(this) as FrameRequestCallback);\n    }\n  }\n\n  /**\n   * The keyEvent down listener\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keydown', ['$event'])\n  keyDownEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.keyDownEvent,\n      stringData: event.code\n    } as ObservableModel);\n  }\n\n  /**\n   * The keyEvent uplistener\n   * @param event the Keyboard event\n   */\n  @HostListener('window:keyup', ['$event'])\n  keyUpEvent(event: KeyboardEvent) {\n    event.preventDefault();\n    this.gameService.emitMasterObservableEvent({\n      type: ObservableTypeEnum.keyUpEvent,\n      stringData: event.code\n    } as ObservableModel);\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param key The asset to display\n   */\n  toggleAssets(key: string): void {\n    this.spaceship.isDestroyed = true;\n    this.draw();\n    let index = 0;\n    this.spaceships.map((spaceship: SpaceshipClass) => {\n      spaceship.isDestroyed = true;\n    });\n    this.assets.map((asset: AssetConfigurationModel, $index: number) => {\n      if (key === asset.key) {\n        index = $index;\n        this.gameCookieService.setDebugData({\n          secondaryAssetName: key\n        } as DebugDataModel);\n      }\n    });\n\n    this.spaceship = this.spaceships[index];\n    this.animateAsset();\n  }\n}\n","<div class=\"game-container\">\n  <div class=\"asset-title\">Spaceship</div>\n  <div class=\"game-board-container\">\n    <canvas #board class=\"game-board\"></canvas>\n  </div>\n  <div class=\"button-container\">\n    <button (click)=\"animateAsset()\" class=\"animation-button button\">Animate</button>\n    <div *ngFor=\"let asset of assets\">\n      <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n        {{ asset.name }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { GameConfigurationModel } from '../model/game-configuration.model';\nimport { DebugAssetsModel } from '../model/debug-assets.model';\nimport { AssetConfigurationModel } from '../model/asset-configuration.model';\nimport { GameCookieService } from '../service/game-cookie.service';\nimport { DebugDataModel } from '../model/debug-data.model';\n\n/**\n * The space invaders component\n */\n@Component({\n  selector: 'bp-space-invaders',\n  templateUrl: './space-invaders.component.html',\n  styleUrls: ['./space-invaders.component.scss', '../font/press-start-2p.scss']\n})\nexport class SpaceInvadersComponent implements OnInit {\n  /**\n   * The debug variable\n   */\n  isDebug: boolean;\n  /**\n   * Debug Assets\n   */\n  debugAssets: DebugAssetsModel;\n  /**\n   * Debug Assets\n   */\n  assets: AssetConfigurationModel[];\n\n  /**\n   * Constructor\n   *\n   * @param gameConfiguration The Game Configuration\n   * @param gameCookie The Game Cookie Service\n   */\n  constructor(\n    @Inject('GameConfigurationData') gameConfiguration: GameConfigurationModel,\n    private gameCookieService: GameCookieService\n  ) {\n    this.isDebug = gameConfiguration.isDebug;\n\n    this.debugAssets = {\n      spaceship: true,\n      alienBoss: false,\n      alien: false,\n      missile: false,\n      number: false,\n      bomb: false,\n      defense: false\n    } as DebugAssetsModel;\n\n    this.assets = [\n      {\n        key: 'spaceship',\n        name: 'Spaceship'\n      } as AssetConfigurationModel,\n      {\n        key: 'alien',\n        name: 'Alien'\n      } as AssetConfigurationModel,\n      {\n        key: 'alienBoss',\n        name: 'Alien Boss'\n      } as AssetConfigurationModel,\n      {\n        key: 'bomb',\n        name: 'Bomb'\n      } as AssetConfigurationModel,\n      {\n        key: 'missile',\n        name: 'Missile'\n      } as AssetConfigurationModel,\n      {\n        key: 'defense',\n        name: 'Defense'\n      } as AssetConfigurationModel,\n      {\n        key: 'number',\n        name: 'Number'\n      } as AssetConfigurationModel\n    ];\n  }\n\n  /**\n   * On Init\n   */\n  ngOnInit() {\n    this.toggleAssets(this.gameCookieService.getDebugData());\n  }\n\n  /**\n   * toggleAssets\n   *\n   * @param asset The asset to display\n   */\n  toggleAssets(asset: string): void {\n    Object.keys(this.debugAssets).map((key: string) => {\n      if (key === asset) {\n        /* eslint-disable-next-line */\n        // @ts-ignore\n        this.debugAssets[key] = true;\n        this.gameCookieService.setDebugData({\n          assetName: key\n        } as DebugDataModel);\n      } else {\n        /* eslint-disable-next-line */\n        // @ts-ignore\n        this.debugAssets[key] = false;\n      }\n    });\n  }\n}\n","<div class=\"game-container\" [class.debug]=\"isDebug\">\n  <div *ngIf=\"!isDebug\">\n    <bp-gameboard></bp-gameboard>\n  </div>\n  <div *ngIf=\"isDebug\" class=\"debug-container\">\n    <div *ngIf=\"debugAssets.spaceship\">\n      <bp-spaceship></bp-spaceship>\n    </div>\n    <div *ngIf=\"debugAssets.alienBoss\">\n      <bp-alien-boss></bp-alien-boss>\n    </div>\n    <div *ngIf=\"debugAssets.alien\">\n      <bp-alien></bp-alien>\n    </div>\n    <div *ngIf=\"debugAssets.missile\">\n      <bp-missile></bp-missile>\n    </div>\n    <div *ngIf=\"debugAssets.bomb\">\n      <bp-bomb></bp-bomb>\n    </div>\n    <div *ngIf=\"debugAssets.defense\">\n      <bp-moon-defense></bp-moon-defense>\n    </div>\n    <div *ngIf=\"debugAssets.number\">\n      <bp-number></bp-number>\n    </div>\n    <div class=\"button-container\">\n      <div *ngFor=\"let asset of assets\">\n        <button (click)=\"toggleAssets(asset.key)\" class=\"animation-button button\">\n          {{ asset.name }}\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { SpaceInvadersComponent } from './space-invaders/space-invaders.component';\nimport { GameboardComponent } from './gameboard/gameboard.component';\nimport { GameService } from './service/game.service';\nimport { CommonModule } from '@angular/common';\nimport { AlienComponent } from './aliens/alien/test-component/alien.component';\nimport { SpaceshipComponent } from './spaceships/spaceship/test-component/spaceship.component';\nimport { MissileComponent } from './missile/missile/test-component/missile.component';\nimport { BombComponent } from './bomb/test-component/bomb.component';\nimport { GameConfigurationModel } from './model/game-configuration.model';\nimport { MoonDefenseComponent } from './moon-defense/test-component/moon-defense.component';\nimport { AlienBossComponent } from './aliens/alien-boss/test-component/alien-boss.component';\nimport { NumberComponent } from './number/test-component/number.component';\nimport { GameCookieService } from './service/game-cookie.service';\nimport { CookieService } from 'ngx-cookie-service';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [\n    AlienBossComponent,\n    AlienComponent,\n    BombComponent,\n    GameboardComponent,\n    MissileComponent,\n    MoonDefenseComponent,\n    NumberComponent,\n    SpaceInvadersComponent,\n    SpaceshipComponent\n  ],\n  exports: [SpaceInvadersComponent],\n  providers: [CookieService, GameCookieService, GameService]\n})\nexport class SpaceInvadersModule {\n  static forRoot(gameConfiguration: GameConfigurationModel): ModuleWithProviders<SpaceInvadersModule> {\n    return {\n      ngModule: SpaceInvadersModule,\n      providers: [\n        {\n          provide: 'GameConfigurationData',\n          useValue: gameConfiguration\n        },\n        CookieService,\n        GameCookieService\n      ]\n    };\n  }\n}\n"],"names":["BLOCK_SIZE","COLS","ROWS","COLORS","ASSET_ANIMATION_1","ASSET_ANIMATION","DESTRUCTION_ANIMATION_1","DESTRUCTION_ANIMATION_2","DESTRUCTION_ANIMATION_3","DESTRUCTION_ANIMATION","KEY","i1.GameService","i2.GameCookieService","ASSET_ANIMATE_2","i1.GameCookieService","i2.GameService","ENGINE_ANIMATION_1","ENGINE_ANIMATION_2","ENGINE_ANIMATION_3","ENGINE_ANIMATION","i2","i3.AlienBossComponent","i4.AlienComponent","i5.BombComponent","i6.GameboardComponent","i7.MissileComponent","i8.MoonDefenseComponent","i9.NumberComponent","i10.SpaceshipComponent"],"mappings":"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E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CACvD,CAAC;AAKK,MAAMC,iBAAe,GAAG,CAACD,mBAAiB,CAAC;;ACb3C,MAAMH,MAAI,GAAG,EAAE,CAAC;AAIhB,MAAMC,MAAI,GAAG,EAAE,CAAC;AAIhB,MAAMF,YAAU,GAAG,EAAE,CAAC;AAKtB,MAAMG,QAAM,GAAG;IACpB,MAAM;IACN,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,oBAAoB;CACrB,CAAC;kBAKW,GAAG,CAAA;aAIE,IAAI,CAAA,IAAA,GAAG,WAAW,CAAC,EAAA;aAInB,IAAI,CAAA,IAAA,GAAG,WAAW,CAAC,EAAA;aAInB,IAAK,CAAA,KAAA,GAAG,YAAY,CAAC,EAAA;;AAMvC,MAAMG,yBAAuB,GAAG;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC;AAKF,MAAMC,yBAAuB,GAAG;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC;AAKF,MAAMC,yBAAuB,GAAG;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CA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E,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CA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,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKF,MAAMS,iBAAe,GAAG;AACtB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKK,MAAMR,iBAAe,GAAG,CAACD,mBAAiB,EAAES,iBAAe,CAAC;;AC/C7D,MAAO,WAAY,SAAQ,UAAU,CAAA;AAQzC,IAAA,WAAA,CACE,WAAwB,EACxB,GAA6B,EAC7B,aAAiC,EACjC,IAAY,EAAA;QAEZ,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;IAKkB,KAAK,GAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAGR,iBAAe,CAAC;QACvC,KAAK,CAAC,KAAK,EAAE,CAAC;KACf;AACF;;AC9BD,MAAMD,mBAAiB,GAAG;AACxB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKF,MAAMS,iBAAe,GAAG;AACtB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKK,MAAMR,iBAAe,GAAG,CAACD,mBAAiB,EAAES,iBAAe,CAAC;;AC/C7D,MAAO,WAAY,SAAQ,UAAU,CAAA;AAQzC,IAAA,WAAA,CACE,WAAwB,EACxB,GAA6B,EAC7B,aAAiC,EACjC,IAAY,EAAA;QAEZ,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;IAKkB,KAAK,GAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAGR,iBAAe,CAAC;QACvC,KAAK,CAAC,KAAK,EAAE,CAAC;KACf;AACF;;AC9BD,MAAMD,mBAAiB,GAAG;AACxB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKF,MAAMS,iBAAe,GAAG;AACtB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKK,MAAMR,iBAAe,GAAG,CAACD,mBAAiB,EAAES,iBAAe,CAAC;;AC/C7D,MAAO,WAAY,SAAQ,UAAU,CAAA;AAQzC,IAAA,WAAA,CACE,WAAwB,EACxB,GAA6B,EAC7B,aAAiC,EACjC,IAAY,EAAA;QAEZ,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;IAKkB,KAAK,GAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAGR,iBAAe,CAAC;QACvC,KAAK,CAAC,KAAK,EAAE,CAAC;KACf;AACF;;AC9BD,MAAMD,mBAAiB,GAAG;AACxB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKF,MAAMS,iBAAe,GAAG;AACtB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKK,MAAMR,iBAAe,GAAG,CAACD,mBAAiB,EAAES,iBAAe,CAAC;;AC/C7D,MAAO,WAAY,SAAQ,UAAU,CAAA;AAQzC,IAAA,WAAA,CACE,WAAwB,EACxB,GAA6B,EAC7B,aAAiC,EACjC,IAAY,EAAA;QAEZ,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;IAKkB,KAAK,GAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAGR,iBAAe,CAAC;QACvC,KAAK,CAAC,KAAK,EAAE,CAAC;KACf;AACF;;AC9BD,MAAMD,mBAAiB,GAAG;AACxB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKF,MAAMS,iBAAe,GAAG;AACtB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKK,MAAMR,iBAAe,GAAG,CAACD,mBAAiB,EAAES,iBAAe,CAAC;;AC/C7D,MAAO,WAAY,SAAQ,UAAU,CAAA;AAQzC,IAAA,WAAA,CACE,WAAwB,EACxB,GAA6B,EAC7B,aAAiC,EACjC,IAAY,EAAA;QAEZ,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;IAKkB,KAAK,GAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAGR,iBAAe,CAAC;QACvC,KAAK,CAAC,KAAK,EAAE,CAAC;KACf;AACF;;AC9BD,MAAMD,mBAAiB,GAAG;AACxB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKF,MAAM,eAAe,GAAG;AACtB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE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AAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,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,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5D,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7D,CAAC;AAKK,MAAMC,iBAAe,GAAG,CAACD,mBAAiB,CAAC;;AC1B3C,MAAMH,MAAI,GAAG,EAAE,CAAC;AAIhB,MAAMC,MAAI,GAAG,EAAE,CAAC;AAIhB,MAAMF,YAAU,GAAG,EAAE,CAAC;AAKtB,MAAMG,QAAM,GAAG;IACpB,MAAM;IACN,mBAAmB;IACnB,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC;kBAKW,GAAG,CAAA;aAIE,IAAK,CAAA,KAAA,GAAG,OAAO,CAAC,EAAA;aAIhB,IAAI,CAAA,IAAA,GAAG,WAAW,CAAC,EAAA;aAInB,IAAK,CAAA,KAAA,GAAG,YAAY,CAAC,EAAA;;AAMvC,MAAM,uBAAuB,GAAG;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC;AAKF,MAAM,uBAAuB,GAAG;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC/B,CAAC;AAKF,MAAM,uBAAuB,GAAG;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,E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CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC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"}