@geekybones/editor-kit 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-kit.js","sources":["../src/canvas/Application.ts","../src/canvas/EditorKitActions.ts","../src/core/BaseElement.ts","../src/elements/Image/ImageElement.ts","../src/elements/Image/index.ts","../src/elements/Shape/strokeAlign.ts","../src/elements/Shape/Circle/CircleShape.ts","../src/elements/Shape/Line/LineShape.ts","../src/elements/Shape/Rectangle/RectangleShape.ts","../src/elements/Shape/Star/StarShape.ts","../src/elements/Shape/registry.ts","../src/elements/SVG/SVGElement.ts","../src/elements/SVG/index.ts","../src/elements/Text/textBackground.ts","../src/elements/Text/Fonts/Arial/Arial.ttf?url","../node_modules/.pnpm/typr.js@1.0.0/node_modules/typr.js/index.js","../src/elements/Text/Vector/fontAdapter.ts","../node_modules/.pnpm/earcut@3.0.2/node_modules/earcut/src/earcut.js","../src/elements/Text/Vector/glyphGeometry.ts","../src/elements/Text/Vector/shader.ts","../src/elements/Text/Vector/vectorLayers.ts","../src/elements/Text/Vector/vectorLayout.ts","../src/elements/Text/Vector/vectorStyleTransforms.ts","../src/elements/Text/Vector/builder.ts","../src/elements/Text/Vector/deform.ts","../src/elements/Text/Vector/registry.ts","../src/elements/Text/Vector/render.ts","../src/elements/Text/textEffectMount.ts","../src/elements/Text/textEffectUpdate.ts","../src/elements/Text/textRaster.ts","../src/elements/Text/BaseTextElement.ts","../src/elements/Text/Vector/effects/Arch.ts","../src/elements/Text/Vector/effectBuilders.ts","../src/elements/Text/Vector/effects/Bridge.ts","../src/elements/Text/Vector/effects/Bulge.ts","../src/elements/Text/Vector/effects/Cone.ts","../src/elements/Text/Vector/effects/Curved.ts","../src/elements/Text/Vector/effects/Downward.ts","../src/elements/Text/Vector/effects/Normal.ts","../src/elements/Text/Vector/effects/Pinch.ts","../src/elements/Text/Vector/effects/Perspective.ts","../src/elements/Text/Vector/effects/Pointed.ts","../src/elements/Text/Vector/effects/Upward.ts","../src/elements/Text/Vector/effects/Valley.ts","../src/elements/Text/TextElement.ts","../src/elements/Text/registry.ts","../src/canvas/ElementLoader.ts","../src/core/canvasBounds.ts","../src/extensions/alignment/accessor.ts","../src/extensions/history/commands/CompositeCommand.ts","../src/extensions/history/commands/UpdateCommand.ts","../src/extensions/alignment/AlignmentManager.ts","../src/extensions/camera/accessor.ts","../src/core/KeyboardShortcuts.ts","../src/extensions/camera/CameraControls.ts","../src/extensions/camera/CameraTransforms.ts","../src/extensions/camera/CameraManager.ts","../src/core/duplicateOptions.ts","../src/extensions/contextMenu/accessor.ts","../src/extensions/contextMenu/MenuRenderer.ts","../src/extensions/history/commands/AddCommand.ts","../src/extensions/history/commands/RemoveCommand.ts","../src/extensions/contextMenu/ContextMenuManager.ts","../src/extensions/export/accessor.ts","../src/extensions/export/ExportManager.ts","../src/extensions/fonts/accessor.ts","../src/extensions/fonts/FontManager.ts","../src/extensions/grid/accessor.ts","../src/extensions/grid/GridManager.ts","../src/extensions/history/accessor.ts","../src/extensions/history/HistoryManager.ts","../src/extensions/interaction/accessor.ts","../src/core/Transform.ts","../src/extensions/interaction/icons/arrowBothSides.ts","../src/extensions/interaction/icons/copy.ts","../src/extensions/interaction/icons/move.ts","../src/extensions/interaction/icons/rotate.ts","../src/extensions/interaction/icons/trash.ts","../src/extensions/interaction/icons/index.ts","../src/extensions/interaction/controls/ControlHandle.ts","../src/extensions/interaction/BoundingBox.ts","../src/extensions/interaction/InteractionClipboard.ts","../src/extensions/interaction/InteractionActions.ts","../src/extensions/interaction/InteractionSelectionState.ts","../src/extensions/interaction/ResizeSession.ts","../src/extensions/interaction/ResizeStrategy.ts","../src/extensions/interaction/InteractionGestures.ts","../src/extensions/interaction/InteractionSelectionBindings.ts","../src/extensions/interaction/InteractionManager.ts","../src/extensions/history/commands/LayerCommand.ts","../src/extensions/layering/accessor.ts","../src/extensions/layering/LayerManager.ts","../src/extensions/performance/accessor.ts","../src/extensions/performance/CacheManager.ts","../src/extensions/performance/DirtyTracker.ts","../src/extensions/performance/PerformanceManager.ts","../src/extensions/serialization/accessor.ts","../src/extensions/serialization/defaultAdapters.ts","../src/extensions/serialization/SerializationManager.ts","../src/extensions/snap/types.ts","../src/extensions/snap/accessor.ts","../src/extensions/snap/SnapLines.ts","../src/extensions/snap/SnapResolver.ts","../src/extensions/snap/SnapManager.ts","../src/extensions/index.ts","../src/canvas/ExtensionLoader.ts","../src/core/ElementRegistry.ts","../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../src/core/Events.ts","../src/canvas/EditorKit.ts","../src/elements/Shape/index.ts","../src/elements/Text/index.ts"],"sourcesContent":["import { Application as PixiApplication } from 'pixi.js';\n\nexport interface ApplicationConfig {\n width?: number;\n height?: number;\n backgroundColor?: string;\n}\n\nexport class Application {\n private app!: PixiApplication;\n public readonly ready: Promise<void>;\n private destroyed = false;\n private canvasEl: HTMLCanvasElement | null = null;\n\n constructor(\n private readonly container: HTMLElement,\n private readonly config: ApplicationConfig = {},\n ) {\n this.ready = this.initAsync();\n }\n\n private async initAsync(): Promise<void> {\n this.app = new PixiApplication();\n\n await this.app.init({\n width: this.config.width ?? 1920,\n height: this.config.height ?? 1080,\n background: this.config.backgroundColor ?? '#ffffff',\n antialias: true,\n autoDensity: true,\n resolution: typeof window !== 'undefined' ? (window.devicePixelRatio ?? 1) : 1,\n });\n\n this.canvasEl = this.app.canvas as HTMLCanvasElement;\n this.container.appendChild(this.canvasEl);\n\n this.canvasEl.setAttribute('tabindex', '0');\n this.canvasEl.style.outline = 'none';\n\n this.app.stage.sortableChildren = true;\n this.app.stage.eventMode = 'static';\n this.app.stage.hitArea = this.app.screen;\n\n if (this.destroyed) {\n this.destroy();\n }\n }\n\n getPixiApp(): PixiApplication {\n if (!this.app) throw new Error('EditorKit not initialized — await canvas.ready first');\n return this.app;\n }\n\n getCanvas(): HTMLCanvasElement {\n if (this.canvasEl) return this.canvasEl;\n return this.container.querySelector('canvas') as HTMLCanvasElement;\n }\n\n destroy(): void {\n this.destroyed = true;\n\n const canvas = this.canvasEl;\n if (canvas?.parentNode === this.container) {\n this.container.removeChild(canvas);\n }\n this.canvasEl = null;\n\n if (this.app && (this.app as unknown as { renderer?: unknown }).renderer) {\n this.app.destroy();\n }\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementRegistry } from '@/core/ElementRegistry';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { HistoryTrack } from '@/extensions/history/types';\nimport type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializedElement } from '@/extensions/serialization/types';\n\ntype UpdateKind = Exclude<HistoryTrack, 'add' | 'remove'> | null;\n\ntype EditorKitActionsContext = {\n registry: ElementRegistry;\n getHistoryManager: () => HistoryManager | undefined;\n getSerializationManager: () => SerializationManager | undefined;\n addElement: (element: BaseElement<BaseOptions>) => Promise<void>;\n removeElement: (id: string) => void;\n updateElement: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) => Promise<void>;\n getUpdateKind: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) => UpdateKind;\n};\n\nexport function applyHistoryAwareChange(\n getHistoryManager: () => HistoryManager | undefined,\n fallback: () => Promise<void> | void,\n withHistory: (history: HistoryManager) => Promise<void> | void,\n): Promise<void> {\n const history = getHistoryManager();\n if (!history) {\n return Promise.resolve(fallback());\n }\n\n return Promise.resolve(withHistory(history));\n}\n\nexport function addWithHistory(\n ctx: EditorKitActionsContext,\n element: BaseElement<BaseOptions>,\n): Promise<void> {\n const existing = ctx.registry.get(element.getId());\n\n return applyHistoryAwareChange(\n ctx.getHistoryManager,\n () => ctx.addElement(element),\n (history) => {\n if (existing) {\n const kind =\n existing.getType() === 'text'\n ? 'text'\n : ctx.getUpdateKind(existing, element.getOptions());\n if (!kind) {\n return ctx.addElement(element);\n }\n\n return history.update(existing.getId(), kind, existing.getOptions(), element.getOptions());\n }\n\n return history.add([element.getOptions()]);\n },\n );\n}\n\nexport function removeWithHistory(ctx: EditorKitActionsContext, id: string): Promise<void> {\n return applyHistoryAwareChange(\n ctx.getHistoryManager,\n () => ctx.removeElement(id),\n (history) => history.remove([id]),\n );\n}\n\nexport function updateWithHistory(\n ctx: EditorKitActionsContext,\n id: string,\n next: Partial<BaseOptions>,\n): Promise<void> {\n const element = ctx.registry.get(id);\n if (!element) {\n return Promise.resolve();\n }\n\n const kind = ctx.getUpdateKind(element, next);\n return applyHistoryAwareChange(\n ctx.getHistoryManager,\n () => ctx.updateElement(element, next),\n (history) => {\n if (!kind) {\n return ctx.updateElement(element, next);\n }\n\n return history.update(id, kind, element.getOptions(), next);\n },\n );\n}\n\nexport function clearElements(\n registry: ElementRegistry,\n removeElement: (id: string) => void,\n): void {\n for (const id of [...registry.getAll().keys()]) {\n removeElement(id);\n }\n}\n\nexport function getElementSnapshot(\n registry: ElementRegistry,\n getSerializationManager: () => SerializationManager | undefined,\n id: string,\n): SerializedElement | undefined {\n const element = registry.get(id);\n if (!element) {\n return undefined;\n }\n\n const serializer = getSerializationManager();\n return serializer ? serializer.serialize(element) : (element.getOptions() as SerializedElement);\n}\n","import type { Container } from 'pixi.js';\nimport type { BaseOptions } from '@/core/BaseOptions';\n\nexport abstract class BaseElement<TOptions extends BaseOptions> {\n protected options: TOptions;\n protected displayObject!: Container;\n\n constructor(options: TOptions) {\n this.options = { ...options };\n }\n\n abstract init(): void | Promise<void>;\n abstract update(next: Partial<TOptions>): void | Promise<void>;\n abstract destroy(): void;\n\n applyDefaultPosition(x: number, y: number): void {\n if (this.options.x === undefined) this.options.x = x;\n if (this.options.y === undefined) this.options.y = y;\n }\n\n getId(): string {\n return this.options.id;\n }\n\n getType(): string {\n return this.options.type;\n }\n\n getOptions(): TOptions {\n return { ...this.options };\n }\n\n getDisplayObject(): Container {\n return this.displayObject;\n }\n\n setZIndex(zIndex: number): void {\n this.options.zIndex = zIndex;\n this.displayObject.zIndex = zIndex;\n }\n\n protected applyBaseTransform(): void {\n const {\n x = 0,\n y = 0,\n rotationDeg = 0,\n scaleX = 1,\n scaleY = 1,\n zIndex = 0,\n visible = true,\n } = this.options;\n\n this.displayObject.position.set(x, y);\n this.displayObject.rotation = (rotationDeg * Math.PI) / 180;\n this.displayObject.scale.set(scaleX, scaleY);\n this.displayObject.zIndex = zIndex;\n this.displayObject.visible = visible;\n }\n\n protected centerPivot(): void {\n const bounds = this.displayObject.getLocalBounds();\n this.displayObject.pivot.set(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2);\n }\n}\n","import { Assets, Container, Sprite } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { ImageOptions } from '@/elements/Image/ImageOptions';\n\nexport class ImageElement extends BaseElement<ImageOptions> {\n private sprite: Sprite | null = null;\n\n async init(): Promise<void> {\n this.displayObject = new Container();\n await this.loadSprite();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n async update(next: Partial<ImageOptions>): Promise<void> {\n const srcChanged = next.src !== undefined && next.src !== this.options.src;\n Object.assign(this.options, next);\n\n if (srcChanged) {\n await this.loadSprite();\n } else if (this.sprite) {\n if (next.width !== undefined) this.sprite.width = next.width;\n if (next.height !== undefined) this.sprite.height = next.height;\n if (next.tint !== undefined) this.sprite.tint = next.tint;\n }\n\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private async loadSprite(): Promise<void> {\n this.displayObject.removeChildren();\n const texture = await Assets.load(this.options.src);\n this.sprite = new Sprite(texture);\n\n if (this.options.width !== undefined) this.sprite.width = this.options.width;\n if (this.options.height !== undefined) this.sprite.height = this.options.height;\n if (this.options.tint !== undefined) this.sprite.tint = this.options.tint;\n\n this.displayObject.addChild(this.sprite);\n }\n}\n","import type { ElementFactory } from '@/core/ElementRegistry';\nimport { ImageElement } from '@/elements/Image/ImageElement';\nimport type { ImageOptions } from '@/elements/Image/ImageOptions';\n\nexport const IMAGE_FACTORIES: Record<string, ElementFactory> = {\n image: (opts) => new ImageElement(opts as ImageOptions),\n};\n\nfunction create(options: ImageOptions): ImageElement {\n return new ImageElement(options);\n}\n\nexport const Image = {\n create,\n factories: IMAGE_FACTORIES,\n} as const;\n\nexport type { ImageOptions };\nexport { ImageElement };\n","export type StrokeAlign = 'inside' | 'center' | 'outside';\n\nexport function getStrokeAlignment(strokeAlign?: StrokeAlign): number {\n switch (strokeAlign) {\n case 'inside':\n return 1;\n case 'outside':\n return 0;\n default:\n return 0.5;\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { CircleOptions } from '@/elements/Shape/Circle/CircleOptions';\nimport { getStrokeAlignment } from '@/elements/Shape/strokeAlign';\n\nexport class CircleShape extends BaseElement<CircleOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<CircleOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n const {\n radius = 50,\n width,\n height,\n fill,\n fillAlpha = 1,\n stroke,\n strokeWidth = 1,\n strokeAlpha = 1,\n strokeAlign,\n } = this.options;\n\n const rx = width !== undefined ? width / 2 : radius;\n const ry = height !== undefined ? height / 2 : radius;\n const drawShape = () => (rx === ry ? g.circle(0, 0, rx) : g.ellipse(0, 0, rx, ry));\n\n if (fill !== undefined) {\n drawShape();\n g.fill({ color: fill, alpha: fillAlpha });\n }\n if (stroke !== undefined) {\n drawShape();\n g.stroke({\n color: stroke,\n width: strokeWidth,\n alpha: strokeAlpha,\n alignment: getStrokeAlignment(strokeAlign),\n });\n }\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { LineOptions } from '@/elements/Shape/Line/LineOptions';\n\nexport class LineShape extends BaseElement<LineOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<LineOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n const { width, stroke = 0x000000, strokeWidth = 2, strokeAlpha = 1 } = this.options;\n g.moveTo(0, 0).lineTo(width, 0);\n g.stroke({ color: stroke, width: strokeWidth, alpha: strokeAlpha, cap: 'square' });\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { RectangleOptions } from '@/elements/Shape/Rectangle/RectangleOptions';\nimport { getStrokeAlignment } from '@/elements/Shape/strokeAlign';\n\nexport class RectangleShape extends BaseElement<RectangleOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<RectangleOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n\n const {\n width,\n height,\n fill,\n fillAlpha = 1,\n stroke,\n strokeWidth = 1,\n strokeAlpha = 1,\n strokeAlign,\n borderRadius,\n } = this.options;\n\n if (fill !== undefined) {\n if (borderRadius) {\n g.roundRect(0, 0, width, height, borderRadius);\n } else {\n g.rect(0, 0, width, height);\n }\n g.fill({ color: fill, alpha: fillAlpha });\n }\n\n if (stroke !== undefined) {\n if (borderRadius) {\n g.roundRect(0, 0, width, height, borderRadius);\n } else {\n g.rect(0, 0, width, height);\n }\n g.stroke({\n color: stroke,\n width: strokeWidth,\n alpha: strokeAlpha,\n alignment: getStrokeAlignment(strokeAlign),\n });\n }\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { StarOptions } from '@/elements/Shape/Star/StarOptions';\nimport { getStrokeAlignment } from '@/elements/Shape/strokeAlign';\n\nexport class StarShape extends BaseElement<StarOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<StarOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n const {\n points,\n width,\n height,\n fill,\n fillAlpha = 1,\n stroke,\n strokeWidth = 1,\n strokeAlpha = 1,\n strokeAlign,\n } = this.options;\n const outerRadius = Math.min(width, height) / 2;\n const innerRadius = outerRadius * 0.45;\n\n if (fill !== undefined) {\n g.star(0, 0, points, outerRadius, innerRadius);\n g.fill({ color: fill, alpha: fillAlpha });\n }\n if (stroke !== undefined) {\n g.star(0, 0, points, outerRadius, innerRadius);\n g.stroke({\n color: stroke,\n width: strokeWidth,\n alpha: strokeAlpha,\n alignment: getStrokeAlignment(strokeAlign),\n });\n }\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementFactory } from '@/core/ElementRegistry';\nimport type { CircleOptions } from '@/elements/Shape/Circle/CircleOptions';\nimport { CircleShape } from '@/elements/Shape/Circle/CircleShape';\nimport type { LineOptions } from '@/elements/Shape/Line/LineOptions';\nimport { LineShape } from '@/elements/Shape/Line/LineShape';\nimport type { RectangleOptions } from '@/elements/Shape/Rectangle/RectangleOptions';\nimport { RectangleShape } from '@/elements/Shape/Rectangle/RectangleShape';\nimport type { StarOptions } from '@/elements/Shape/Star/StarOptions';\nimport { StarShape } from '@/elements/Shape/Star/StarShape';\n\nconst shapeFactories = new Map<string, ElementFactory>([\n ['shape:rectangle', (opts) => new RectangleShape(opts as RectangleOptions)],\n ['shape:circle', (opts) => new CircleShape(opts as CircleOptions)],\n ['shape:star', (opts) => new StarShape(opts as StarOptions)],\n ['shape:line', (opts) => new LineShape(opts as LineOptions)],\n]);\n\nexport function registerShapeFactory(type: string, factory: ElementFactory): void {\n shapeFactories.set(type, factory);\n}\n\nexport function getShapeFactories(): ReadonlyMap<string, ElementFactory> {\n return shapeFactories;\n}\n\nexport function createShape(options: BaseOptions): BaseElement<BaseOptions> {\n const factory = shapeFactories.get(options.type);\n if (!factory) throw new Error(`Unknown shape type: \"${options.type}\"`);\n return factory(options);\n}\n\nexport type { CircleOptions, LineOptions, RectangleOptions, StarOptions };\nexport { CircleShape, LineShape, RectangleShape, StarShape };\n","import { Container, Sprite, Texture } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { SVGOptions } from '@/elements/SVG/SVGOptions';\n\nexport class SVGElement extends BaseElement<SVGOptions> {\n private sprite: Sprite | null = null;\n private blobUrl: string | null = null;\n\n async init(): Promise<void> {\n this.displayObject = new Container();\n await this.loadSVG();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n async update(next: Partial<SVGOptions>): Promise<void> {\n const srcChanged = next.src !== undefined && next.src !== this.options.src;\n Object.assign(this.options, next);\n\n if (srcChanged) {\n await this.loadSVG();\n } else if (this.sprite) {\n if (next.width !== undefined) this.sprite.width = next.width;\n if (next.height !== undefined) this.sprite.height = next.height;\n }\n\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n if (this.blobUrl) {\n URL.revokeObjectURL(this.blobUrl);\n this.blobUrl = null;\n }\n this.displayObject.destroy({ children: true });\n }\n\n private async loadSVG(): Promise<void> {\n this.displayObject.removeChildren();\n if (this.blobUrl) {\n URL.revokeObjectURL(this.blobUrl);\n this.blobUrl = null;\n }\n\n const src = this.options.src;\n let imgUrl = src;\n if (src.trim().startsWith('<')) {\n imgUrl = this.svgStringToUrl(src);\n this.blobUrl = imgUrl;\n }\n\n const img = await this.loadImage(imgUrl);\n const w = this.options.width ?? img.naturalWidth;\n const h = this.options.height ?? img.naturalHeight;\n\n const offscreen = document.createElement('canvas');\n offscreen.width = w;\n offscreen.height = h;\n const ctx = offscreen.getContext('2d');\n if (!ctx) {\n throw new Error('Failed to create 2D canvas context for SVG rasterization.');\n }\n ctx.drawImage(img, 0, 0, w, h);\n\n const texture = Texture.from(offscreen);\n this.sprite = new Sprite(texture);\n this.sprite.width = w;\n this.sprite.height = h;\n this.displayObject.addChild(this.sprite);\n }\n\n private svgStringToUrl(svgString: string): string {\n const blob = new Blob([svgString], { type: 'image/svg+xml' });\n return URL.createObjectURL(blob);\n }\n\n private loadImage(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new window.Image();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n }\n}\n","import type { ElementFactory } from '@/core/ElementRegistry';\nimport { SVGElement } from '@/elements/SVG/SVGElement';\nimport type { SVGOptions } from '@/elements/SVG/SVGOptions';\n\nexport const SVG_FACTORIES: Record<string, ElementFactory> = {\n svg: (opts) => new SVGElement(opts as SVGOptions),\n};\n\nexport type { SVGOptions };\nexport { SVGElement };\n","import { Graphics } from 'pixi.js';\n\nimport type { BaseTextOptions } from '@/elements/Text/types';\n\nexport function createTextBackground(\n options: Pick<BaseTextOptions, 'background' | 'backgroundAlpha' | 'backgroundPadding'>,\n fontSize: number,\n bounds: { x: number; y: number; width: number; height: number },\n): Graphics | null {\n const { background, backgroundAlpha = 1, backgroundPadding } = options;\n\n if (background === undefined || backgroundAlpha <= 0) {\n return null;\n }\n\n if (bounds.width <= 0 || bounds.height <= 0) {\n return null;\n }\n\n const resolvedPadding = Math.max(0, backgroundPadding ?? 6);\n const padX = resolvedPadding;\n const padY = resolvedPadding;\n const radius = Math.max(3, fontSize * 0.12);\n const backgroundNode = new Graphics();\n\n backgroundNode\n .roundRect(\n bounds.x - padX,\n bounds.y - padY,\n bounds.width + padX * 2,\n bounds.height + padY * 2,\n radius,\n )\n .fill({\n color: background,\n alpha: Math.max(0, Math.min(1, backgroundAlpha)),\n });\n\n return backgroundNode;\n}\n","export default \"data:font/ttf;base64,AAEAAAAXAQAABABwRFNJR5cCBT0ABB7IAAAVrEdERUZRRFG8AAQbLAAAAJpHU1VCyPetWwAEG8gAAALeSlNURm0qaQYABB6oAAAAHkxUU0hzRa0/AABFpAAABSxPUy8yDN8yawAAAfgAAABWUENMVP17PkMABBr0AAAANlZETVhQkmr1AABK0AAAEZRjbWFwZ7RNjwAAHXAAABOOY3Z0IJZw0nYAAG0UAAAGMGZwZ213J6n1AABnZAAABbBnYXNwABgACQAAAlAAAAAQZ2x5Zujqr1kAAQQMAALPhGhkbXgubx5RAACH5AAAfChoZWFkyjn2kAAAAXwAAAA2aGhlYRJtEaoAAAG0AAAAJGhtdHjKonNAAABzRAAAFKBrZXJuN2E5NgAEBZQAABVgbG9jYQftrjgAADEAAAAUpG1heHAJzgyTAAAB2AAAACBuYW1lwQFnPAAAAmAAABsNcG9zdDuxVa8AA9OQAAAyBHByZXDrrXHiAABcZAAACv0AAQAAAALR7HuG5JlfDzz1CBsIAAAAAACi4ycqAAAAALU9ssj6r/1nEDoITAAAAAkAAQABAAAAAAABAAAHPv5OAEMQAPqv/jMQOgABAAAAAAAAAAAAAAAAAAAFKAABAAAFKAEAAD8AYwAFAAIAEAAvAEIAAAQMCv0AAwACAAEDiAGQAAUAAAWaBTMAAAEbBZoFMwAAA9EAZgISCAUCCwYEAgICAgIEAAB6h4AAAAAAAAAIAAAAAE1vbm8AQAAg//wF0/5RATMHPgGyQAAB////AAAAAAAAAAMACAACABEAAf//AAMAAABGA04AAAADAAAAAAD+AAAAAAADAAAAAQAKAT4AAAADAAAAAgAOBd4AAAADAAAAAwBeBcAAAAADAAAABAAKAT4AAAADAAAABQAYBe4AAAADAAAABgAOBh4AAAADAAAABwDEBiwAAAADAAAACAAmB3wAAAADAAAACQCKDaQAAAADAAAACgTCAP4AAAADAAAACwBiDi4AAAADAAAADABmDpAAAAADAAAADQa0BvAAAAADAAAADgBcDvYAAQAAAAAAAAB/D1IAAQAAAAAAAQAFD/EAAQAAAAAAAgAHEkEAAQAAAAAAAwAvEjIAAQAAAAAABAAFD/EAAQAAAAAABQAMEkkAAQAAAAAABgAHEmEAAQAAAAAABwBiEmgAAQAAAAAACAATExAAAQAAAAAACQBFFiQAAQAAAAAACgJhD9EAAQAAAAAACwAxFmkAAQAAAAAADAAzFpoAAQAAAAAADQNaEsoAAQAAAAAADgAuFs0AAwABBAMAAgAMFvsAAwABBAUAAgAQFwsAAwABBAYAAgAMFxsAAwABBAcAAgAQFycAAwABBAgAAgAQFzcAAwABBAkAAAD+AAAAAwABBAkAAQAKAT4AAwABBAkAAgAOBd4AAwABBAkAAwBeBcAAAwABBAkABAAKAT4AAwABBAkABQAYBe4AAwABBAkABgAOBh4AAwABBAkABwDEBiwAAwABBAkACAAmB3wAAwABBAkACQCKDaQAAwABBAkACgTCAP4AAwABBAkACwBiDi4AAwABBAkADABmDpAAAwABBAkADQa0BvAAAwABBAkADgBcDvYAAwABBAoAAgAMFvsAAwABBAsAAgAQF0cAAwABBAwAAgAMFvsAAwABBA4AAgAMF1cAAwABBBAAAgAOF2cAAwABBBMAAgASF3UAAwABBBQAAgAMFvsAAwABBBUAAgAQFvsAAwABBBYAAgAMFvsAAwABBBkAAgAOF4cAAwABBBsAAgAQF1cAAwABBB0AAgAMFvsAAwABBB8AAgAMFvsAAwABBCQAAgAOF5UAAwABBCoAAgAOF6MAAwABBC0AAgAOF7EAAwABCAoAAgAMFvsAAwABCBYAAgAMFvsAAwABDAoAAgAMFvsAAwABDAwAAgAMFvsAVAB5AHAAZQBmAGEAYwBlACAAqQAgAFQAaABlACAATQBvAG4AbwB0AHkAcABlACAAQwBvAHIAcABvAHIAYQB0AGkAbwBuACAAcABsAGMALgAgAEQAYQB0AGEAIACpACAAVABoAGUAIABNAG8AbgBvAHQAeQBwAGUAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AIABwAGwAYwAvAFQAeQBwAGUAIABTAG8AbAB1AHQAaQBvAG4AcwAgAEkAbgBjAC4AIAAxADkAOQAwAC0AMQA5ADkAMgAuACAAQQBsAGwAIABSAGkAZwBoAHQAcwAgAFIAZQBzAGUAcgB2AGUAZABDAG8AbgB0AGUAbQBwAG8AcgBhAHIAeQAgAHMAYQBuAHMAIABzAGUAcgBpAGYAIABkAGUAcwBpAGcAbgAsACAAQQByAGkAYQBsACAAYwBvAG4AdABhAGkAbgBzACAAbQBvAHIAZQAgAGgAdQBtAGEAbgBpAHMAdAAgAGMAaABhAHIAYQBjAHQAZQByAGkAcwB0AGkAYwBzACAAdABoAGEAbgAgAG0AYQBuAHkAIABvAGYAIABpAHQAcwAgAHAAcgBlAGQAZQBjAGUAcwBzAG8AcgBzACAAYQBuAGQAIABhAHMAIABzAHUAYwBoACAAaQBzACAAbQBvAHIAZQAgAGkAbgAgAHQAdQBuAGUAIAB3AGkAdABoACAAdABoAGUAIABtAG8AbwBkACAAbwBmACAAdABoAGUAIABsAGEAcwB0ACAAZABlAGMAYQBkAGUAcwAgAG8AZgAgAHQAaABlACAAdAB3AGUAbgB0AGkAZQB0AGgAIABjAGUAbgB0AHUAcgB5AC4AIAAgAFQAaABlACAAbwB2AGUAcgBhAGwAbAAgAHQAcgBlAGEAdABtAGUAbgB0ACAAbwBmACAAYwB1AHIAdgBlAHMAIABpAHMAIABzAG8AZgB0AGUAcgAgAGEAbgBkACAAZgB1AGwAbABlAHIAIAB0AGgAYQBuACAAaQBuACAAbQBvAHMAdAAgAGkAbgBkAHUAcwB0AHIAaQBhAGwAIABzAHQAeQBsAGUAIABzAGEAbgBzACAAcwBlAHIAaQBmACAAZgBhAGMAZQBzAC4AIAAgAFQAZQByAG0AaQBuAGEAbAAgAHMAdAByAG8AawBlAHMAIABhAHIAZQAgAGMAdQB0ACAAbwBuACAAdABoAGUAIABkAGkAYQBnAG8AbgBhAGwAIAB3AGgAaQBjAGgAIABoAGUAbABwAHMAIAB0AG8AIABnAGkAdgBlACAAdABoAGUAIABmAGEAYwBlACAAYQAgAGwAZQBzAHMAIABtAGUAYwBoAGEAbgBpAGMAYQBsACAAYQBwAHAAZQBhAHIAYQBuAGMAZQAuACAAIABBAHIAaQBhAGwAIABpAHMAIABhAG4AIABlAHgAdAByAGUAbQBlAGwAeQAgAHYAZQByAHMAYQB0AGkAbABlACAAZgBhAG0AaQBsAHkAIABvAGYAIAB0AHkAcABlAGYAYQBjAGUAcwAgAHcAaABpAGMAaAAgAGMAYQBuACAAYgBlACAAdQBzAGUAZAAgAHcAaQB0AGgAIABlAHEAdQBhAGwAIABzAHUAYwBjAGUAcwBzACAAZgBvAHIAIAB0AGUAeAB0ACAAcwBlAHQAdABpAG4AZwAgAGkAbgAgAHIAZQBwAG8AcgB0AHMALAAgAHAAcgBlAHMAZQBuAHQAYQB0AGkAbwBuAHMALAAgAG0AYQBnAGEAegBpAG4AZQBzACAAZQB0AGMALAAgAGEAbgBkACAAZgBvAHIAIABkAGkAcwBwAGwAYQB5ACAAdQBzAGUAIABpAG4AIABuAGUAdwBzAHAAYQBwAGUAcgBzACwAIABhAGQAdgBlAHIAdABpAHMAaQBuAGcAIABhAG4AZAAgAHAAcgBvAG0AbwB0AGkAbwBuAHMALgBNAG8AbgBvAHQAeQBwAGUAOgBBAHIAaQBhAGwAIABSAGUAZwB1AGwAYQByADoAVgBlAHIAcwBpAG8AbgAgADIALgA4ADIAIAAoAE0AaQBjAHIAbwBzAG8AZgB0ACkAQQByAGkAYQBsAE0AVABBAHIAaQBhAGwArgAgAFQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAAVABoAGUAIABNAG8AbgBvAHQAeQBwAGUAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AIABwAGwAYwAgAHIAZQBnAGkAcwB0AGUAcgBlAGQAIABpAG4AIAB0AGgAZQAgAFUAUwAgAFAAYQB0ACAAJgAgAFQATQAgAE8AZgBmAC4AIABhAG4AZAAgAGUAbABzAGUAdwBoAGUAcgBlAC4ATgBPAFQASQBGAEkAQwBBAFQASQBPAE4AIABPAEYAIABMAEkAQwBFAE4AUwBFACAAQQBHAFIARQBFAE0ARQBOAFQADQAKAA0ACgBUAGgAaQBzACAAdAB5AHAAZQBmAGEAYwBlACAAaQBzACAAdABoAGUAIABwAHIAbwBwAGUAcgB0AHkAIABvAGYAIABNAG8AbgBvAHQAeQBwAGUAIABUAHkAcABvAGcAcgBhAHAAaAB5ACAAYQBuAGQAIABpAHQAcwAgAHUAcwBlACAAYgB5ACAAeQBvAHUAIABpAHMAIABjAG8AdgBlAHIAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIABhACAAbABpAGMAZQBuAHMAZQAgAGEAZwByAGUAZQBtAGUAbgB0AC4AIABZAG8AdQAgAGgAYQB2AGUAIABvAGIAdABhAGkAbgBlAGQAIAB0AGgAaQBzACAAdAB5AHAAZQBmAGEAYwBlACAAcwBvAGYAdAB3AGEAcgBlACAAZQBpAHQAaABlAHIAIABkAGkAcgBlAGMAdABsAHkAIABmAHIAbwBtACAATQBvAG4AbwB0AHkAcABlACAAbwByACAAdABvAGcAZQB0AGgAZQByACAAdwBpAHQAaAAgAHMAbwBmAHQAdwBhAHIAZQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGIAeQAgAG8AbgBlACAAbwBmACAATQBvAG4AbwB0AHkAcABlACcAcwAgAGwAaQBjAGUAbgBzAGUAZQBzAC4ADQAKAA0ACgBUAGgAaQBzACAAcwBvAGYAdAB3AGEAcgBlACAAaQBzACAAYQAgAHYAYQBsAHUAYQBiAGwAZQAgAGEAcwBzAGUAdAAgAG8AZgAgAE0AbwBuAG8AdAB5AHAAZQAuACAAVQBuAGwAZQBzAHMAIAB5AG8AdQAgAGgAYQB2AGUAIABlAG4AdABlAHIAZQBkACAAaQBuAHQAbwAgAGEAIABzAHAAZQBjAGkAZgBpAGMAIABsAGkAYwBlAG4AcwBlACAAYQBnAHIAZQBlAG0AZQBuAHQAIABnAHIAYQBuAHQAaQBuAGcAIAB5AG8AdQAgAGEAZABkAGkAdABpAG8AbgBhAGwAIAByAGkAZwBoAHQAcwAsACAAeQBvAHUAcgAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAHMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBtAGkAdABlAGQAIAB0AG8AIAB5AG8AdQByACAAdwBvAHIAawBzAHQAYQB0AGkAbwBuACAAZgBvAHIAIAB5AG8AdQByACAAbwB3AG4AIABwAHUAYgBsAGkAcwBoAGkAbgBnACAAdQBzAGUALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAGMAbwBwAHkAIABvAHIAIABkAGkAcwB0AHIAaQBiAHUAdABlACAAdABoAGkAcwAgAHMAbwBmAHQAdwBhAHIAZQAuAA0ACgANAAoASQBmACAAeQBvAHUAIABoAGEAdgBlACAAYQBuAHkAIABxAHUAZQBzAHQAaQBvAG4AIABjAG8AbgBjAGUAcgBuAGkAbgBnACAAeQBvAHUAcgAgAHIAaQBnAGgAdABzACAAeQBvAHUAIABzAGgAbwB1AGwAZAAgAHIAZQB2AGkAZQB3ACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAYQBnAHIAZQBlAG0AZQBuAHQAIAB5AG8AdQAgAHIAZQBjAGUAaQB2AGUAZAAgAHcAaQB0AGgAIAB0AGgAZQAgAHMAbwBmAHQAdwBhAHIAZQAgAG8AcgAgAGMAbwBuAHQAYQBjAHQAIABNAG8AbgBvAHQAeQBwAGUAIABmAG8AcgAgAGEAIABjAG8AcAB5ACAAbwBmACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAYQBnAHIAZQBlAG0AZQBuAHQALgANAAoADQAKAE0AbwBuAG8AdAB5AHAAZQAgAGMAYQBuACAAYgBlACAAYwBvAG4AdABhAGMAdABlAGQAIABhAHQAOgANAAoADQAKAFUAUwBBACAALQAgACgAOAA0ADcAKQAgADcAMQA4AC0AMAA0ADAAMAAJAAkAVQBLACAALQAgADAAMQAxADQANAAgADAAMQA3ADMANwAgADcANgA1ADkANQA5AA0ACgBoAHQAdABwADoALwAvAHcAdwB3AC4AbQBvAG4AbwB0AHkAcABlAC4AYwBvAG0ATQBvAG4AbwB0AHkAcABlACAAVAB5AHAAZQAgAEQAcgBhAHcAaQBuAGcAIABPAGYAZgBpAGMAZQAgAC0AIABSAG8AYgBpAG4AIABOAGkAYwBoAG8AbABhAHMALAAgAFAAYQB0AHIAaQBjAGkAYQAgAFMAYQB1AG4AZABlAHIAcwAgADEAOQA4ADIAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAG0AbwBuAG8AdAB5AHAAZQAuAGMAbwBtAC8AaAB0AG0AbAAvAG0AdABuAGEAbQBlAC8AbQBzAF8AYQByAGkAYQBsAC4AaAB0AG0AbABoAHQAdABwADoALwAvAHcAdwB3AC4AbQBvAG4AbwB0AHkAcABlAC4AYwBvAG0ALwBoAHQAbQBsAC8AbQB0AG4AYQBtAGUALwBtAHMAXwB3AGUAbABjAG8AbQBlAC4AaAB0AG0AbABoAHQAdABwADoALwAvAHcAdwB3AC4AbQBvAG4AbwB0AHkAcABlAC4AYwBvAG0ALwBoAHQAbQBsAC8AdAB5AHAAZQAvAGwAaQBjAGUAbgBzAGUALgBoAHQAbQBsVHlwZWZhY2UgqSBUaGUgTW9ub3R5cGUgQ29ycG9yYXRpb24gcGxjLiBEYXRhIKkgVGhlIE1vbm90eXBlIENvcnBvcmF0aW9uIHBsYy9UeXBlIFNvbHV0aW9ucyBJbmMuIDE5OTAtMTk5Mi4gQWxsIFJpZ2h0cyBSZXNlcnZlZENvbnRlbXBvcmFyeSBzYW5zIHNlcmlmIGRlc2lnbiwgQXJpYWwgY29udGFpbnMgbW9yZSBodW1hbmlzdCBjaGFyYWN0ZXJpc3RpY3MgdGhhbiBtYW55IG9mIGl0cyBwcmVkZWNlc3NvcnMgYW5kIGFzIHN1Y2ggaXMgbW9yZSBpbiB0dW5lIHdpdGggdGhlIG1vb2Qgb2YgdGhlIGxhc3QgZGVjYWRlcyBvZiB0aGUgdHdlbnRpZXRoIGNlbnR1cnkuICBUaGUgb3ZlcmFsbCB0cmVhdG1lbnQgb2YgY3VydmVzIGlzIHNvZnRlciBhbmQgZnVsbGVyIHRoYW4gaW4gbW9zdCBpbmR1c3RyaWFsIHN0eWxlIHNhbnMgc2VyaWYgZmFjZXMuICBUZXJtaW5hbCBzdHJva2VzIGFyZSBjdXQgb24gdGhlIGRpYWdvbmFsIHdoaWNoIGhlbHBzIHRvIGdpdmUgdGhlIGZhY2UgYSBsZXNzIG1lY2hhbmljYWwgYXBwZWFyYW5jZS4gIEFyaWFsIGlzIGFuIGV4dHJlbWVseSB2ZXJzYXRpbGUgZmFtaWx5IG9mIHR5cGVmYWNlcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGVxdWFsIHN1Y2Nlc3MgZm9yIHRleHQgc2V0dGluZyBpbiByZXBvcnRzLCBwcmVzZW50YXRpb25zLCBtYWdhemluZXMgZXRjLCBhbmQgZm9yIGRpc3BsYXkgdXNlIGluIG5ld3NwYXBlcnMsIGFkdmVydGlzaW5nIGFuZCBwcm9tb3Rpb25zLk1vbm90eXBlOkFyaWFsIFJlZ3VsYXI6VmVyc2lvbiAyLjgyIChNaWNyb3NvZnQpQXJpYWxNVEFyaWFsqCBUcmFkZW1hcmsgb2YgVGhlIE1vbm90eXBlIENvcnBvcmF0aW9uIHBsYyByZWdpc3RlcmVkIGluIHRoZSBVUyBQYXQgJiBUTSBPZmYuIGFuZCBlbHNld2hlcmUuTk9USUZJQ0FUSU9OIE9GIExJQ0VOU0UgQUdSRUVNRU5UDQoNClRoaXMgdHlwZWZhY2UgaXMgdGhlIHByb3BlcnR5IG9mIE1vbm90eXBlIFR5cG9ncmFwaHkgYW5kIGl0cyB1c2UgYnkgeW91IGlzIGNvdmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBhZ3JlZW1lbnQuIFlvdSBoYXZlIG9idGFpbmVkIHRoaXMgdHlwZWZhY2Ugc29mdHdhcmUgZWl0aGVyIGRpcmVjdGx5IGZyb20gTW9ub3R5cGUgb3IgdG9nZXRoZXIgd2l0aCBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBvbmUgb2YgTW9ub3R5cGUncyBsaWNlbnNlZXMuDQoNClRoaXMgc29mdHdhcmUgaXMgYSB2YWx1YWJsZSBhc3NldCBvZiBNb25vdHlwZS4gVW5sZXNzIHlvdSBoYXZlIGVudGVyZWQgaW50byBhIHNwZWNpZmljIGxpY2Vuc2UgYWdyZWVtZW50IGdyYW50aW5nIHlvdSBhZGRpdGlvbmFsIHJpZ2h0cywgeW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBsaW1pdGVkIHRvIHlvdXIgd29ya3N0YXRpb24gZm9yIHlvdXIgb3duIHB1Ymxpc2hpbmcgdXNlLiBZb3UgbWF5IG5vdCBjb3B5IG9yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZS4NCg0KSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9uIGNvbmNlcm5pbmcgeW91ciByaWdodHMgeW91IHNob3VsZCByZXZpZXcgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSByZWNlaXZlZCB3aXRoIHRoZSBzb2Z0d2FyZSBvciBjb250YWN0IE1vbm90eXBlIGZvciBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYWdyZWVtZW50Lg0KDQpNb25vdHlwZSBjYW4gYmUgY29udGFjdGVkIGF0Og0KDQpVU0EgLSAoODQ3KSA3MTgtMDQwMAkJVUsgLSAwMTE0NCAwMTczNyA3NjU5NTkNCmh0dHA6Ly93d3cubW9ub3R5cGUuY29tTW9ub3R5cGUgVHlwZSBEcmF3aW5nIE9mZmljZSAtIFJvYmluIE5pY2hvbGFzLCBQYXRyaWNpYSBTYXVuZGVycyAxOTgyaHR0cDovL3d3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AHwAtwChAH8AfgCAAIEA6gDsALkBlgGXAQIBAwEEAQUA+wD8AZgBmQGaAZsA/QD+AQYBBwEIAP8BnAGdAZ4BnwGgAaEBCQEKAQsBDAGiAaMA9gD3AaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMA+ADVAYoBiwG0AbUBtgG3AbgBDQEOAbkBugEPARABEQESAOAA4QETARQBuwG8ARUBFgGMAb0BvgG/AcABwQHCARcBGACvALABGQEaAcMBxAEbARwBHQEeAcUBxgD5APoA4gDjAR8BIAEhASIBxwHIAckBygHLAcwBzQHOASMBJAElASYBzwHQAdEB0gHTAdQAugEnASgBKQEqAOQA5QHVANYA3wDZANoA2wDeANcA3QHvAfAB8QHcAfIB8wH0AfYB9wH4AfkB+gErAfsB/AH9Af4BLAH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgEtAgsCDAINAg4CDwIQAhECEgITAhQBLgIVAhYBLwEwAhcCGAIZAhoCGwIcAh0CHgIfAiACjAIhAiIBMQEyAiMBMwIkAiUCJgInAigCKQIqAisCiAKJBRAFEQLvA4EDgwOFA4cDiQONA48DkwOVA5kDnQOhA6UDqQOrA60DrwOxA7UDuQO9A8EDxQPJA80C8APRA9UD2QPdA+ED5QPpA+0D7wPxAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8AwoDCwMMAwADAQMCBKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUB4wHkBPYE9wT4BPkE+gT7ALEAsgKKATQAtQC2AMMB5QCzALQAxACCAMEAhwNOA08DUgNQA1EDVQNWA1cDWANTA1QA9QHnAsAEfgC8AJkA7QDCAKUAkgE/AI8BQQF2AZEBkgGTAXcAuAF8Ae0B7gRxBHIEgQRzA1kDWgNbA1wDXQSEBHUEdwSFBHYEhgR5BIcEiASJBIoEiwSMBHgElASNBI4EjwSQBJEElgSaBJsEnASdBJ4ElwSY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APYA9wGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAPgA1QGKAYsBtAG1AbYBtwG4AQ0BDgG5AboBDwEQAREBEgDgAOEBEwEUAbsBvAEVARYBjAG9Ab4BvwHAAcEBwgEXARgArwCwARkBGgHDAcQBGwEcAR0BHgHFAcYA+QD6AOIA4wEfASABIQEiAccByAHJAcoBywHMAc0BzgEjASQBJQEmAc8B0AHRAdIB0wHUALoBJwEoASkBKgDkAOUB1QDWAN8A2QDaANsA3gDXAN0B7wHwAfEB3AHyAfMB9AH2AfcB+AH5AfoBKwH7AfwB/QH+ASwB/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoBLQILAgwCDQIOAg8CEAIRAhICEwIUAS4CFQIWAS8BMAIXAhgCGQIaAhsCHAIdAh4CHwIgAowCIQIiATEBMgIjATMCJAIlAiYCJwIoAikCKgIrAogCiQUQBREC7wOBA4MDhQOHA4kDjQOPA5MDlQOZA50DoQOlA6kDqwOtA68DsQO1A7kDvQPBA8UDyQPNAvAD0QPVA9kD3QPhA+UD6QPtA+8D8QLxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AMKAwsDDAMAAwEDAgSkBKUEpgSnBKgEqQSqBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYExwTIBMkEygTLBMwEzQTOBM8E0ATRBNIE0wTUBNUE1gTXBNgE2QTaBNsE3ATdBN4E3wTgBOEE4gTjBOQE5QTmBOcE6ATpBOoE6wTsBO0E7gTvBPAE8QTyBPME9AT1AeMB5AT2BPcE+AT5BPoE+wCxALICigE0ALUAtgDDAeUAswC0AMQAggDBAIcDTgNPA1IDUANRA1UDVgNXA1gDUwNUAPUB5wLABH4AvACZAO0AwgClAJIBPwCPAUEBdgGRAZIBkwF3ALgBfAHtAe4EcQRyBIEEcwNZA1oDWwNcA10EhAR1BHcEhQR2BIYEeQSHBIgEiQSKBIsEjAR4BJQEjQSOBI8EkASRBJYEmgSbBJwEnQSeBJcEmASZBH0EnwSgBKEEogSjAzUDNgPzA/QAAAAAAAAAAABsAAAAbAAAAGwAAABsAAAA8gAAAZoAAAM8AAAFwgAAB2oAAAlUAAAJmgAAChoAAAqY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AAEX4gABGSYAARlWAAEZhgABGbgAARnoAAEaoAABGwQAARukAAEb1AABHAQAARw0AAEcZAABHKAAARzSAAEdBAABHTQAAR1kAAEdmAABHcoAAR36AAEeKgABHpwAAR7QAAEgngABIaAAASMwAAElYAABJ6oAASk8AAEpoAABKioAASo6AAEqyAABLHIAAS1QAAEuLgABLsoAAS/aAAExngABMx4AATPiAAEz8gABNAIAATT2AAE1BgABNRYAATUmAAE1NgABNUYAATYYAAE2KAABNjgAATasAAE2vAABNzAAATdAAAE4KgABODoAAThKAAE4WgABOWYAATqiAAE61AABOwoAATtAAAE7cAABO6AAATvkAAE8DAABPVIAAT4oAAE/IAABQAAAAUD+AAFBQAABQloAAUMyAAFDQgABQ1IAAUSIAAFEmAABRb4AAUbCAAFHhAABSKQAAUmwAAFLFgABS0YAAUt+AAFLtAABS9oAAUwKAAFMMAABTRwAAU1MAAFOcAABToAAAU6QAAFOwgABTtIAAU/6AAFQ5gABUdIAAVH6AAFSKgABUtYAAVLmAAFTvgABU84AAVQaAAFU3AABVOwAAVcQAAFYbAABWPIAAVkiAAFaQAABWt4AAVruAAFa/gABWw4AAVuAAAFbkAABW6AAAVuwAAFckgABXbwAAV3MAAFeQgABXvAAAV+UAAFgVgABYRgAAWH0AAFisgABYtYAAWPQAAFj/gABZA4AAWUmAAFmUgABZpAAAWdYAAFnaAABaXoAAWrkAAFrpgABa9YAAW0gAAFt5gABbxYAAW+4AAFvyAABcFIAAXBiAAFwcgABcOYAAXD2AAFycgABcoIAAXMMAAFzngABdHAAAXVeAAF2GAABdu4AAXfOAAF38gABeSAAAXoeAAF6VAABe4oAAXuuAAF8sgABfMIAAXzSAAF9AgABfRIAAX4EAAF+7AABf/QAAYAYAAGASAABgPAAAYE6AAGBiAABgbYAAYMOAAGDeAABhAYAAYUyAAGF5gABhsAAAYcKAAGHiAABiE4AAYh2AAGIwAABiRYAAYn4AAGKQgABinYAAYqeAAGKxgABivoAAYs+AAGLggABi8AAAYzmAAGNfgABjoYAAY7aAAGPaAABj54AAZAoAAGQmAABkV4AAZGWAAGSDAABkrYAAZM8AAGTrgABlKQAAZTaAAGVYAABlf4AAZbEAAGXcAABmEIAAZkMAAGZ1gABmnAAAZroAAGb1gABnJYAAZzkAAGdMgABnX4AAZ20AAGeEAABntgAAZ9IAAGfgAABn8YAAZ/2AAGgTAABoQAAAaE0AAGhZAABoZgAAaHIAAGh+AABoigAAaO2AAGj7gABpC4AAaRmAAGkngABpSgAAaYCAAGmMgABprwAAabqAAGnIAABp1wAAaeMAAGnzgABqNAAAansAAGrCAABqzwAAauKAAGruAABrRIAAa1IAAGtvgABrfwAAa4qAAGuaAABr4YAAa+uAAGw6gABsXoAAbIkAAGypgABs2IAAbR6AAG1iAABtbwAAbZCAAG3ngABuCAAAbhqAAG5dAABubwAAbrAAAG7PAABu5QAAbwYAAG89AABvgoAAb74AAG/ogABwJIAAcFIAAHCDgABwvYAAcOmAAHEKAABxoYAAcawAAHG2gABx5IAAce8AAHI/gABygQAAcruAAHLGAABy0IAActsAAHLlgABy8AAAc1AAAHNagABzZQAAc2+AAHN6AABzhIAAc48AAHOZgABzpAAAc7EAAHO7gABzxgAAc9CAAHQvAAB0MwAAdHuAAHR/gAB0igAAdJSAAHSfAAB0qYAAdRQAAHWXAAB14oAAdeaAAHZFgAB2SYAAdpsAAHcOAAB3T4AAd6+AAHgXgAB4oIAAePcAAHlvgAB5wIAAegwAAHoWgAB6IQAAeiuAAHo2AAB6QIAAeksAAHpVgAB6YAAAemqAAHp1AAB6f4AAeooAAHqUgAB6nwAAeqmAAHq0AAB7QwAAe6IAAHvzAAB8bQAAfL8AAHzJgAB81AAAfOAAAHzsAAB9AAAAfRQAAH0kAAB9QIAAfVWAAH1tAAB9goAAfZAAAH2ggAB9sgAAfcSAAH3QgAB93oAAfeqAAH44gAB/CgAAfxSAAH8fAAB/KYAAfzQAAH8+gAB/SQAAf1OAAH9eAAB/aIAAf3MAAH99gAB/iAAAf5KAAH+dAAB/p4AAf7IAAH+8gAB/xwAAf9GAAH/cAAB/5oAAf/EAAH/7gACABgAAgBCAAIAbAACAJYAAgDAAAIBXgACAXQAAgGeAAIEfgACBI4AAgWoAAIGygACCAgAAglKAAIK8AACCwAAAgxCAAINkgACD4IAAhFWAAISbgACEn4AAhMAAAITjgACFI4AAhSeAAIVPgACFU4AAhZkAAIXtgACGOYAAhj2AAIZxAACGdQAAhtKAAIbWgACHG4AAhx+AAIdsgACH0gAAiAEAAIgFAACIRIAAiJsAAIi+AACIwgAAiQyAAIlvgACJnoAAiaKAAInIgACJzIAAif+AAIoDgACKOYAAij2AAIp/gACKg4AAivUAAIr5AACLTwAAi1MAAIvtgACL8YAAjHAAAIx0AACMzoAAjNKAAI0OgACNEoAAjXiAAI18gACNxAAAjcgAAI4YAACOHAAAjiAAAI4kAACOggAAjoYAAI6KAACOjgAAjuKAAI82AACPaYAAj6KAAJACgACQYwAAkKMAAJDoAACROQAAkT0AAJF4gACRrwAAkhYAAJIaAACSYYAAkqMAAJMhAACTJQAAkykAAJMtAACTf4AAk4OAAJOxgACTtYAAk/kAAJP9AACUOAAAlDwAAJSDgACUh4AAlK8AAJSzAACUtwAAlPKAAJVPgACVmoAAldkAAJXdAACV4QAAleUAAJZMgACWvIAAlvAAAJb0AACXjAAAmB6AAJjAAACZWgAAmfsAAJqYgACbDIAAm3sAAJuFgACbkAAAm5QAAJuYAACbooAAm60AAJu3gACbu4AAm7+AAJvKAACb1IAAm9iAAJvcgACb5wAAm/GAAJv8AACcAAAAnAQAAJwIAACcDAAAnBAAAJwUAACcHoAAnCKAAJwmgACcMQAAnDuAAJxGAACcUIAAnFsAAJxlgACccAAAnHqAAJyFAACcj4AAnJoAAJykgACcrwAAnLmAAJzEAACczoAAnNkAAJzjgACc7gAAnPiAAJ0DAACdDYAAnRgAAJ0igACdLQAAnTeAAJ1CAACdTIAAnVcAAJ1hgACdbAAAnXaAAJ2BAACdi4AAnZYAAJ2ggACdqwAAnbWAAJ3AAACdyoAAndUAAJ3fgACd6gAAnfSAAJ3/AACeCYAAnhQAAJ4egACeKQAAnjOAAJ4+AACeSIAAnlMAAJ5dgACehYAAnpaAAJ60AACevoAAnskAAJ7TgACe3gAAnuiAAJ7zAACe/YAAnwgAAJ8SgACfHQAAnyeAAJ8yAACfPIAAn0cAAJ9RgACfXAAAn2aAAJ9xAACfe4AAn4YAAJ+QgACfmwAAn6WAAJ+wAACfvQAAn8oAAJ/XAACgHgAAoF6AAKCSgACgy4AAoN0AAKDugAChCgAAoSEAAKE1gAChUYAAoYeAAKG2gACh7IAAohuAAKJDgACiigAAorcAAKLXgACi7gAAov4AAKNFgACjmAAAo/4AAKQVAACkLIAApEOAAKRagACkhAAApK2AAKTYgAClA4AApS6AAKVcgAClioAApbiAAKW9AAClwYAApcYAAKXKgAClzwAApeqAAKYGAACmNAAApjiAAKY9AACmQYAApkWAAKZKAACmToAAplMAAKZXgACmXAAApmCAAKaMAACmtwAApuKAAKcNgACnJIAApzMAAKc9gACnSAAAp1gAAKdsgACni4AAp54AAKe9AACn0gAAp/MAAKgHgACoJQAAqDsAAKhUgACoagAAqICAAKiZAACorAAAqMOAAKjcgACo8AAAqQOAAKkZgACpK4AAqTYAAKlBgACpSwAAqVgAAKlkAACpcAAAqYSAAKmgAACptYAAqdCAAKnlgACqAoAAqhQAAKouAACqP4AAqlaAAKpgAACqaoAAqnQAAKqAAACqiYAAqpMAAKqfgACqq4AAqsAAAKrZgACq7wAAqwiAAKsdgACrOQAAq0mAAKthgACrcgAAq4UAAKuTgACrooAAq7EAAKvAAACrzQAAq9mAAKvlgACr8YAAq/wAAKwFgACsEAAArBuAAKwmAACsOQAArEoAAKxXgACsZoAArHOAAKx/AACsjAAArJgAAKymgACssQAArLyAAKzGAACsz4AArNqAAKzqAACs9gAArQIAAK0OAACtHAAArSkAAK00gACtQIAArUyAAK1YgACtZIAArXGAAK2HAACtlAAArawAAK25AACtzwAArdwAAK3zAACuGoAArk4AAK6WAACuyAAAruKAAK78gACvbgAAr9eAALAcgACwXoAAsK0AALD8gACxGQAAsTcAALFcAACxf4AAsa0AALHaAACyFIAAskoAALJ5gACyqoAAssqAALLvAACzLYAAs2gAALOkgACz4QAAAUoBwEBAasGBgYFBQYGBgYHBwYHBwYGBgYGBgYGBgYHBwcHBwYBJQUMDAwMEhw+HAUGdRwSHBISBZocH4XglhIHBwfCBgYmNQYjJ2VTNznlXTlxNyQ1UwYrEjfGpNXEYwb+BgcFBQYFBgcGBgYGBgYGBgYGBgYHBwcHBgYGBgYGBgYGBgYFBgYGBgYRBgYBBgYGAQwGBgYGBhgMDAEG/xYYAQUpDOEHUgYMTQYGAQUFBxEHBgEUFAUFBgIGBQEGBgcBAQYHBRRfBQUFBQUHBwcHBwcHBgYG/wb8AQEBAQYBAQEBGQUGHGP+BgYFBgUGAQcGBgYMBAwBElM+ASsuCy4LLQYGJSYlJi4BLgwnDCcBOQElAQEuNy43EiQuAS4BASua/poBLjcuNxxjHGMBEjALLSYSHh4UASYyAQEBAQEBARkBARkBGRkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARkZATIyMjIZGRkBASsBAQEBATEBARIBGQEZMRIZAQEZASUmLgsuCwwnDCcMJxJTElMSAS43Ljc+/z7/Pv8+ORzlAV0YATkuNwEBEiQSJC4BASscEi43LjcuNy43haSVxDklJgEBDCn/haSFpIWklcQBAQEMDAwMDAEBAQElARYSAYIU3SUBDQwcLj4BEHUuHxIuHAGalU0nDz6VCyYp3SkBHhIpJN0YFRjGMSQkJCkVKCrdKSQpKgwBJQwBPj4cATE3DDEbJSQBJQwMGBkMDAwSdS4SHBwumjExTRocKxQlMRQBMS4mMSQmAScoCzc3DTcWNyQ3NQsUxDHVMQEsMSQBKjEBJSc3JjErOf/fJCQ3DcQ3AQEBMQwBAQEBAQEBAQEBAQEBAQGzAQEBAQEMAQH3EgEM9wEBHAEB9wwMARAsDAwfARMWwsLCAQHK9wEBHBwPExMTEwEBAQEMAQEBCwwBAQEcAQwMECwMHwETFvcBASwBAQEBAQEBCAEBARQBASABGwQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBGwEBAQEBAQEBAQEBAQEBLCwBAQEBAQEBAQEBCQEBIwkBASMBAQEBAQEBAQEBAQEBAQEBAQErGxsbGwEBAQEBAQEBAQEBAQEBAQEBAQwBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBASwBAQEBAQEBAQEBASwsAQEBASwsAQEBASwsAQEsLAEBAQEBAQEBAQEBASkpKSkBAQEBKysRESsrEREBAQEBAQEBATIyMjIyMjIyIwEBASMBAQEBAR0BMjIdAQEBAQEBAQEBAQEBAQEBLCwBAQEBAQEBAQEBLCwjASMBIwEjAQEBAQEBAQEEGwEBIBQBAQEbGxsbGysBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBERkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE5JSYlJiUmJSYlJiUmJSYlJiUmJSYlJiUmDCcMJwwnDCcMJwwnDCcMJz4HPjkSJBIkEiQSJBIkEiQSJAERAREBEQERAREcNxw3GQEZARkBGQEZAZbElsSWxCUmPjkSJBw3HDccNxw3HDcAAAAAJSYBAQcBBwEuFAEBAQEBAQEBAQEBAQEBAAAAAwADAQEBAQEFAwMBAgEBABgF7AvAAPgI/wAIAAj//gAJAAn//QAKAAr//QALAAv//QAMAAz//QANAA3//QAOAA3//QAPAA7//QAQAA///QARAA///AASABH//AATABL//AAUABP//AAVABP/+wAWABT/+wAXABX/+wAYABX/+gAZABf/+wAaABn/+gAbABr/+gAcABr/+gAdABv/+gAeABz/+QAfABz/+QAgAB3/+QAhAB//+QAiACD/+QAjACD/+AAkACH/+AAlACL/+AAmACL/9wAnACP/9wAoACT/9wApACb/9wAqACb/9wArACf/9gAsACj/9gAtACj/9gAuACr/9gAvACv/9gAwAC3/9gAxAC3/9QAyAC7/9QAzAC//9QA0ADD/9AA1ADD/9AA2ADH/9AA3ADP/9AA4ADT/8wA5ADT/8wA6ADX/8wA7ADX/8wA8ADb/8wA9ADf/8wA+ADj/8wA/ADn/8gBAADr/8gBBADv/8gBCADz/8gBDADz/8QBEAD3/8QBFAD7/8QBGAD//8ABHAED/8ABIAEH/8ABJAEL/8ABKAEL/8ABLAEP/8ABMAET/8ABNAEb/7wBOAEb/7wBPAEf/7wBQAEj/7wBRAEn/7gBSAEn/7gBTAEr/7gBUAEv/7QBVAE3/7QBWAE3/7QBXAE7/7QBYAE//7ABZAFD/7ABaAFD/7QBbAFH/7ABcAFP/7ABdAFT/7ABeAFT/7ABfAFX/6wBgAFb/6wBhAFf/6wBiAFf/6gBjAFn/6gBkAFr/6gBlAFv/6gBmAFz/6QBnAFz/6QBoAF3/6QBpAF7/6ABqAGD/6QBrAGD/6QBsAGH/6QBtAGL/6ABuAGP/6ABvAGP/6ABwAGT/5wBxAGX/5wByAGf/5wBzAGf/5wB0AGj/5gB1AGn/5gB2AGr/5gB3AGr/5QB4AGv/5QB5AG3/5QB6AG7/5QB7AG7/5QB8AG//5QB9AHD/5QB+AHH/5AB/AHH/5ACAAHP/5ACBAHT/5ACCAHX/4wCDAHb/4wCEAHb/4wCFAHf/4gCGAHj/4gCHAHn/4gCIAHr/4gCJAHv/4QCKAHz/4QCLAH3/4gCMAH3/4QCNAH7/4QCOAH//4QCPAIH/4QCQAIH/4ACRAIL/4ACSAIP/4ACTAIT/3wCUAIT/3wCVAIX/3wCWAIf/3wCXAIj/4ACYAIj/3wCZAIn/3wCaAIr/3gCbAIv/3gCcAIz/3gCdAIz/3gCeAI7/3gCfAI//3gCgAJD/3gChAJD/3QCiAJH/3QCjAJL/3QCkAJP/3QClAJT/3ACmAJX/2wCnAJb/2wCoAJf/2wCpAJf/2wCqAJj/2wCrAJn/2wCsAJv/2wCtAJv/2wCuAJz/2wCvAJ3/2wCwAJ7/2wCxAJ7/2gCyAJ//2gCzAKD/2gC0AKL/2QC1AKP/2AC2AKP/2AC3AKT/2AC4AKX/2AC5AKb/2AC6AKb/2AC7AKj/2AC8AKn/1wC9AKr/1wC+AKr/1wC/AKv/1wDAAKz/1wDBAK3/1wDCAK7/1wDDAK//1gDEALD/1gDFALH/1QDGALH/1QDHALL/1QDIALP/1ADJALT/1ADKALX/1ADLALb/1ADMALf/1ADNALj/1ADOALn/1ADPALn/1ADQALr/1ADRALz/1ADSAL3/0wDTAL3/0gDUAL7/0gDVAL//0gDWAMD/0QDXAMD/0QDYAML/0QDZAMP/0QDaAMT/0QDbAMT/0QDcAMX/0QDdAMb/0QDeAMf/0ADfAMf/0ADgAMn/zwDhAMr/zwDiAMv/zwDjAMv/zwDkAMz/zwDlAM3/zwDmAM7/zwDnAND/zgDoAND/zgDpANH/zgDqANL/zQDrANP/zQDsANP/zQDtANT/zQDuANb/zADvANf/zADwANf/zADxANj/zADyANn/zADzANr/zAD0ANr/zAD1ANz/ywD2AN3/ywD3AN7/ywD4AN7/ygD5AN//ygD6AOD/ygD7AOH/ygD8AOH/ygD9AOP/yQD+AOT/yQD/AOX/yQD4CP8ACAAI//4ACQAJ//0ACgAK//0ACwAL//0ADAAM//0ADQAN//0ADgAN//0ADwAO//0AEAAP//0AEQAP//wAEgAR//wAEwAS//wAFAAT//wAFQAT//sAFgAU//sAFwAV//sAGAAV//oAGQAX//sAGgAZ//oAGwAa//oAHAAa//oAHQAb//oAHgAc//kAHwAc//kAIAAd//kAIQAf//kAIgAg//kAIwAg//gAJAAh//gAJQAi//gAJgAi//cAJwAj//cAKAAk//cAKQAm//cAKgAm//cAKwAn//YALAAo//YALQAo//YALgAq//YALwAr//YAMAAt//YAMQAt//UAMgAu//UAMwAv//UANAAw//QANQAw//QANgAx//QANwAz//QAOAA0//MAOQA0//MAOgA1//MAOwA1//MAPAA2//MAPQA3//MAPgA4//MAPwA5//IAQAA6//IAQQA7//IAQgA8//EAQwA8//EARAA9//EARQA+//EARgA///AARwBA//AASABB//AASQBC//AASgBC//AASwBD//AATABE//AATQBG/+8ATgBG/+8ATwBH/+8AUABI/+8AUQBJ/+4AUgBJ/+4AUwBK/+4AVABL/+0AVQBN/+0AVgBN/+0AVwBO/+0AWABP/+wAWQBQ/+wAWgBQ/+0AWwBR/+wAXABT/+wAXQBU/+wAXgBU/+wAXwBV/+sAYABW/+sAYQBX/+sAYgBX/+sAYwBZ/+oAZABa/+oAZQBb/+oAZgBc/+kAZwBc/+kAaABd/+kAaQBe/+kAagBg/+kAawBg/+kAbABh/+kAbQBi/+kAbgBj/+gAbwBj/+gAcABk/+gAcQBl/+cAcgBn/+cAcwBn/+cAdABo/+cAdQBp/+YAdgBq/+YAdwBq/+YAeABr/+UAeQBt/+UAegBu/+UAewBu/+UAfABv/+UAfQBw/+QAfgBx/+QAfwBy/+QAgABz/+QAgQB0/+MAggB1/+MAgwB2/+MAhAB2/+MAhQB3/+MAhgB4/+MAhwB5/+IAiAB6/+IAiQB7/+IAigB8/+IAiwB9/+IAjAB9/+IAjQB+/+IAjgB//+IAjwCB/+EAkACB/+EAkQCC/+AAkgCD/+AAkwCE/+AAlACE/+AAlQCF/+AAlgCH/98AlwCI/+AAmACI/98AmQCJ/98AmgCK/94AmwCL/94AnACM/94AnQCM/94AngCO/94AnwCP/94AoACQ/94AoQCQ/90AogCR/90AowCS/90ApACT/90ApQCU/9wApgCV/9sApwCW/9sAqACX/9sAqQCX/9sAqgCY/9sAqwCZ/9sArACb/9sArQCb/9sArgCc/9sArwCd/9sAsACe/9sAsQCe/9oAsgCf/9oAswCg/9kAtACi/9kAtQCj/9gAtgCj/9gAtwCk/9gAuACl/9gAuQCm/9gAugCm/9gAuwCo/9gAvACp/9cAvQCq/9cAvgCq/9cAvwCr/9cAwACs/9cAwQCt/9cAwgCu/9cAwwCv/9YAxACw/9YAxQCx/9UAxgCx/9UAxwCy/9QAyACz/9QAyQC0/9QAygC1/9QAywC2/9QAzAC3/9QAzQC4/9QAzgC5/9QAzwC5/9QA0AC6/9QA0QC8/9QA0gC9/9MA0wC9/9IA1AC+/9IA1QC//9IA1gDA/9EA1wDA/9EA2ADC/9EA2QDD/9EA2gDE/9EA2wDE/9EA3ADF/9EA3QDG/9EA3gDH/9AA3wDH/9AA4ADJ/88A4QDK/88A4gDL/88A4wDL/88A5ADM/88A5QDN/88A5gDO/88A5wDQ/84A6ADQ/84A6QDR/84A6gDS/80A6wDT/80A7ADT/80A7QDU/80A7gDW/8wA7wDX/8wA8ADX/8wA8QDY/8wA8gDZ/8wA8wDa/8wA9ADa/8wA9QDc/8sA9gDd/8sA9wDe/8sA+ADe/8oA+QDf/8oA+gDg/8oA+wDh/8oA/ADh/8oA/QDj/8kA/gDk/8kA/wDl/8kA+Aj/AAgACP/+AAkACf/9AAoACv/9AAsAC//9AAwADP/9AA0ADf/9AA4ADf/9AA8ADv/9ABAAD//9ABEAD//8ABIAEf/8ABMAEv/8ABQAE//8ABUAE//7ABYAFP/7ABcAFf/7ABgAFf/6ABkAF//7ABoAGf/6ABsAGv/6ABwAGv/6AB0AG//6AB4AHP/5AB8AHP/5ACAAHf/5ACEAH//5ACIAIP/5ACMAIP/4ACQAIf/4ACUAIv/4ACYAIv/3ACcAI//3ACgAJP/3ACkAJv/3ACoAJv/3ACsAJ//2ACwAKP/2AC0AKP/2AC4AKv/2AC8AK//2ADAALf/2ADEALf/1ADIALv/1ADMAL//1ADQAMP/0ADUAMP/0ADYAMf/0ADcAM//0ADgANP/zADkANP/zADoANf/zADsANf/zADwANv/zAD0AN//zAD4AOP/zAD8AOf/yAEAAOv/yAEEAO//yAEIAPP/yAEMAPP/xAEQAPf/xAEUAPv/xAEYAP//wAEcAQP/wAEgAQf/wAEkAQv/wAEoAQv/wAEsAQ//wAEwARP/wAE0ARv/vAE4ARv/vAE8AR//vAFAASP/vAFEASf/uAFIASf/uAFMASv/uAFQAS//tAFUATf/tAFYATf/tAFcATv/tAFgAT//sAFkAUP/sAFoAUP/tAFsAUf/sAFwAU//sAF0AVP/sAF4AVP/sAF8AVf/rAGAAVv/rAGEAV//rAGIAV//rAGMAWf/qAGQAWv/qAGUAW//qAGYAXP/pAGcAXP/pAGgAXf/pAGkAXv/pAGoAYP/pAGsAYP/pAGwAYf/pAG0AYv/pAG4AY//oAG8AY//oAHAAZP/oAHEAZf/nAHIAZ//nAHMAZ//nAHQAaP/nAHUAaf/mAHYAav/mAHcAav/mAHgAa//lAHkAbf/lAHoAbv/lAHsAbv/lAHwAb//lAH0AcP/kAH4Acf/kAH8Acv/kAIAAc//kAIEAdP/kAIIAdf/jAIMAdv/jAIQAdv/jAIUAd//jAIYAeP/jAIcAef/iAIgAev/iAIkAe//iAIoAfP/iAIsAff/iAIwAff/iAI0Afv/iAI4Af//iAI8Agf/hAJAAgf/hAJEAgv/gAJIAg//gAJMAhP/gAJQAhP/gAJUAhf/gAJYAh//fAJcAiP/gAJgAiP/fAJkAif/fAJoAiv/eAJsAi//eAJwAjP/eAJ0AjP/eAJ4Ajv/eAJ8Aj//eAKAAkP/eAKEAkP/dAKIAkf/dAKMAkv/dAKQAk//dAKUAlP/cAKYAlf/bAKcAlv/bAKgAl//bAKkAl//bAKoAmP/bAKsAmf/bAKwAm//bAK0Am//bAK4AnP/bAK8Anf/bALAAnv/bALEAnv/aALIAn//aALMAoP/ZALQAov/ZALUAo//YALYAo//YALcApP/YALgApf/YALkApv/YALoApv/YALsAqP/YALwAqf/XAL0Aqv/XAL4Aqv/XAL8Aq//XAMAArP/XAMEArf/XAMIArv/XAMMAr//WAMQAsP/WAMUAsf/VAMYAsf/VAMcAsv/UAMgAs//UAMkAtP/UAMoAtf/UAMsAtv/UAMwAt//UAM0AuP/UAM4Auf/UAM8Auf/UANAAuv/UANEAvP/UANIAvf/TANMAvf/SANQAvv/SANUAv//S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AkICTwJPAl4CZQJxApACkgK0AtYC+gMHAwsDDwMVAyoDRwNdA2UDdAN5A5YDsAPMA90D4gP2A/wD/AP/BAoEHwQiBCYEKwRHBF8EdQSeBOcE5wVcBcsF5QYKBm0Ghga4BvEHNgc+B1AHUQddB48HtgfUCGAAtgDDALUAtwAAAAAAAAAAAAAAAAHgA4EDRQO1AI4CMwQZAs4CzgAtAF8AZANNAj8AAAKoAYgCfQG0AiQFeAY7AjsBTgDwBCYClALGAp8C9gI7A00BSwFTAGoCMQAAAAAAAAYUBKoAAAA8BMMA7QS8AmUCzgO1AHgGDAF+Au8GDACyAQACOQAAAcUDMAQrA8sA2gPfAQcEoQDbBAoBFwHtAqcDUAELAb0EPgVYACEDnACuA3EBfQC1AkUAAAr7CIwBKwFOAaoAhwBUATIB+AP/AAMCTgC0ADcD4wCDAGsC2ADtAHcAiACXAWQEZwCOADMBfADnAKYCngMpBW4GKgYVAckCaQSKAhMBtAACBKkAAAI5ASQBAwUUAIQBXQOaBu8C2QB1AM8ECgDeA6wEvALPAq4DTQTwBVIBaABtAH0AhgBx/4EAeQVYBNIBZwADAVYAJQTgAJQAfAMyBCEAlAB/AHIAXAAvALYAGAC6ALgAQQNNAHIAGAAfAEwBagFVAJkAmgCaAJgAsgAEAHgAaQAUAFcAbgDOALQGVAK4AGcFDgFlAOcAAATL/lIAWv+mAJn/ZwBu/5IALf/UAIf/fAC4AKgA5QCPAKgBhf57AHAAHgDZAN4BTAVGAs8FRv8tAooC2QJTApYAtwAAAAAAAAAAAAAAAAAAASUBGADqAOoArgBGAD4FuwCKBNcAUwA//4z/1QAVACgAIgCZAGIASgDkAG0A7gDlAEgDwAAz/k4Csf9GA3AAeQXfAFH/p/8fAQoAaP9sAE8AvAClBwUAYQcrBgABAAAAAAACOQAAAjkAAAI5ALAC1wBeBHMAFQRzAEkHHQB3BVYAWAGHAFoCqgB8AqoAfAMdAEAErAByAjkAqgKqAEECOQC6AjkAAARzAFUEcwDfBHMAPARzAFYEcwAaBHMAVQRzAE0EcwBhBHMAUwRzAFUCOQC5AjkAqgSsAHAErAByBKwAcARzAFoIHwBvBVb//QVWAJYFxwBmBccAngVWAKIE4wCoBjkAbQXHAKQCOQC/BAAANwVWAJYEcwCWBqoAmAXHAJwGOQBjBVYAngY5AFgFxwChBVYAXATjADAFxwChBVYACQeNABkFVgAJBVYABgTjACkCOQCLAjkAAAI5ACcDwQA2BHP/4QKqAFkEcwBKBHMAhgQAAFAEcwBGBHMASwI5ABMEcwBCBHMAhwHHAIgBx/+iBAAAiAHHAIMGqgCHBHMAhwRzAEQEcwCHBHMASAKqAIUEAAA/AjkAJARzAIMEAAAaBccABgQAAA8EAAAhBAAAKAKsADkCFAC8AqwALwSsAFcFVv/9BVb//QXHAGgFVgCiBccAnAY5AGMFxwChBHMASgRzAEoEcwBKBHMASgRzAEoEcwBKBAAAUARzAEsEcwBLBHMASwRzAEsCOQC9AjkAIwI5/+UCOQAJBHMAhwRzAEQEcwBEBHMARARzAEQEcwBEBHMAgwRzAIMEcwCDBHMAgwRzAEkDMwCABHMAawRzABsEcwBRAs0AbQRMAAEE4wCZBeUAAwXlAAMIAADhAqoA3gKqAD0EZABOCAAAAQY5AFMFtACaBGQATgRkAE0EZABNBHP//QScAKAD9AA4BbQAegaWAKEEZAAAAjEAAAL2AC8C7AAtBiUAfwcdAEQE4wCBBOMAngKqAOgErAByBGQAVARzAC4EZAAzBOUAGgRzAIYEcwCMCAAA7wVW//0FVv/9BjkAYwgAAIEHjQBSBHP//AgAAAACqgBTAqoARwHHAIABxwBsBGQATgP0AC8EAAAhBVYABgFW/jkEc//kAqoAXAKqAFwEAAAXBAAAFwRzAEkCOQC5AccAbAKqAEcIAAAlBVb//QVWAKIFVv/9BVYAogVWAKICOQCNAjn/4AI5AAQCOQAVBjkAYwY5AGMGOQBjBccAoQXHAKEFxwChAjkAxgKqABkCqgAGAqoAHQKqAC4CqgDlAqoAogKqAGsCqgA6AqoAtwKqACgEcwAAAccAAwVWAFwEAAA/BOMAKQQAACgCFAC8Bcf//QRzAEkFVgAGBAAAIQVWAJ4EcwCHBKwAcgSsAKECqgBrAqoAGQKqACEGrABrBqwAawasACEEcwAABjkAbQRzAEICOQCxBVYAXAQAAD8FxwBmBAAAUAXHAGYEAABQBHMARgRr/+ECqgHxBVb//QRzAEoFVv/9BHMASgXHAJ4E6wBHBcf//QVWAKIEcwBLBVYAogRzAEsEcwCWAccAQgRzAJYCVQCIBHMAmgKsAIMFxwCcBHMAhwXHAJwEcwCHBjkAYwRzAEQFxwChAqoAhQXHAKECqgA8BVYAXAQAAD8E4wAwAjkAJATjADADAAAjBccAoQRzAIMFxwChBHMAgwTjACkEAAAoBOMAKQQAACgEaACkBjkAYAZiAFUEoABIBHQASAORAGIE8ABEAykALgUwAEgEa//hBAAAsALrAFIIwAAzCAAATwQAAJkIAABPBAAAmQgAAE8EAACYBAAAmAfVAWoFwACeBKsAcgTVAJ0ErABxBNUCIgTVAQUFq//pBQAByQWrAn4Fq//pBasCfgWr/+kFqwJ+Bav/6QWr/+kFq//pBav/6QWr/+kFqwHABasCfgWrAcAFqwHABav/6QWr/+kFq//pBasCfgWrAcAFqwHABav/6QWr/+kFq//pBasCfgWrAcAFqwHABav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWrAtYFqwBmBav/6gXV//8E1QCSCAAAAAfrATAH6wEgB+sBMAfrASAE1QCyBNUAgATVACoIKwGYCGsBuAdVABAGAAD0BgAAbwRAADoFQAA3BMAAPwQVAEAEAAAlBgAAVQXhAL8DjQCJBNX/2QGAAIAC1QCGBxUAYQKWAA8E1QCSAtYAgwLWAIME1QCyAtYAcAVW//0EcwBKBccAZgQAAFAFxwBmBAAAUAVWAKIEcwBLBVYAogRzAEsFVgCiBHMASwY5AG0EcwBCBjkAbQRzAEIGOQBtBHMAQgXHAKQEcwCHBccAHwRzAAYCOf/OAjn/zgI5/+QCOf/kAjn/9gI5//UCOQCjAccAZgQAADcBx/+iBVYAlgQAAIgEAACGBHMAlgHH//oFxwCcBHMAhwXJAKUEcwCLBjkAYwRzAEQGOQBjBHMARAXHAKECqgBrBVYAXAQAAD8E4wAwAjkADAXHAKEEcwCDBccAoQRzAIMFxwChBHMAgwXHAKEEcwCDB40AGQXHAAYFVgAGBAAAIQHHAIkFVv/9BHMASggAAAEHHQBEBjkAUwTjAIECOQC5B40AGQXHAAYHjQAZBccABgeNABkFxwAGBVYABgQAACEBxwCKAqr/4QRzABsEzQBaBqwAawasACIGrAAiBqwASgKqAOICqgBrAqoA3gKq/+oFV///Bkb/pwa0/6gDEv+oBjL/pwbY/6cGBf+nAcf/eAVW//0FVgCWBVj//gVWAKIE4wApBccApAI5AL8FVgCWBVgACwaqAJgFxwCcBTMAbQY5AGMFxwCkBVYAngTyAJQE4wAwBVYABgVWAAkGrwB/BfsAYQI5AAQFVgAGBKAASAORAGIEcwCLAccAawRgAIgEmgCMBAAAGQOHAEgEcwCLBHMAXAHHAIkEAACGBAAAGAScAKAEAAAaA5UAXARzAEQEjQCDA9sAVgRgAIgEMwARBbQAegY/AFcBx//JBGAAiARzAEgEYACIBj8AVwVXAKIG6wAyBFUAoQXAAGQFVgBcAjkAvwI5AAQEAAA3CHUADQgVAKQG1QAxBKkAoQUVAAoFwACgBVb//QVAAKcFVgCWBFUAoQVrAAAFVgCiB2MABwTVAE4FwAChBcAAoQSpAKEFQAASBqoAmAXHAKQGOQBjBcAAoAVWAJ4FxwBmBOMAMAUVAAoGFQBSBVYACQXrAJ8FVQBXB1UAoQeAAKEGVQAABxUAqAVAAKUFwABVCBUApAXHABoEcwBKBJUAWwRAAIgC6wCIBKsAAARzAEsFWv/7A6sAMgR4AIcEeACHA4AAhgSrABgFgACMBGsAiARzAEQEVQCIBHMAhwQAAFADqgAmBAAAIQaVAEsEAAAPBJUAigQrAEUGawCNBpUAjQUAACgFwACLBCsAhAQVADAGAACJBFUAHwRzAEsEcwAAAusAiQQVAEsEAAA/AccAiAI5AAkBx/+iB0AAEwaAAIMEcwAAA4AAhgQAACEEawCIA+kAoQNKAIgIAABBCJUAoAWFAC0CqgEBAqoAHgKqADECqgAxAqoBAQKqAH4CqgB+AqoAjAKqAIwCqgEBAqoAEAKqAQECqgEhAxAAfQKqAIwCMwDSAqoDCwKq/wQCOQC5BIEAaQRWADIDMQAZBBEALQTRAJYB+QCbAw8AXwTKAJsEuACMAfkAmwQTACgDsABQA7QAPATKAJsEzwBQAfkAmwLSADwEmABaBDwAGQSIAG4EXwBzA7EAGQPUAAoEZgCWBBMAKAWOAGQFJAAoA/IAmwPyAJsD8gCbAeMAWgNWAFoGhgCbAfn/rAQTACgEEwAoA7T/VwO0/1cESAAtBY4AZAWOAGQFjgBkBY4AZASBAGkEgQBpBIEAaQRWADIDMQAZBBEALQTRAJYCSwAA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BgYFBwQHBgYEDAsGCwYLBgYLCAYHBgcHCAcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwsLCwsLBwcHCwwKCAgGBwcGBggIBQcCBAoEBwQEBwQIBgcGBwYGBgYGBgYIBggGCAYHBgkGAgICAgICAgIFAgcFBgYCBwYIBggGCAYHBAcGBgQHBgcGBwYIBgoKCAYCCAYLCggGAwoKCgoKCggGAgQGBgoKCgoEBAQECAkJBQkKCAIIBwgGBwcCBwgIBwcIBwYHBggHCAgCCAYFBgIGBgYFBgYCBgYGBgUGBgUGBQgIAgYGBggGCgYHBwICBQwLCQcHBwgHBwYIBgwHCQkHBwgHCAcGBwYHCAcHBgoKCAkHCAsIBgYHBAYGCAUGBgUGCAYGBgYGBgYIBgYGCAgHCAYGCAYGBgQGBgICAgoJBgUGBgUFCw0JBAQEBAQEBAQEBAQEBAQEAwQEAwYGBQYHAwMHBwMGBQUHBwMFBwYGBgYGBgYJBwYGBgMFCQMGBgUFBwkJCQkGBgYGBQYHAwUHAwYFBQcFBwYGBgYGCQcDBgUGBgAAAAAEBAQFAgIDAgICAgICBgYGBgYGBgYGBgYEBggIAwgGBgYICAgICAIICAgICAgICAcICAgICAMDCAgICAYGBgYFBQkKBAYJCgQGBwYICAgICAgICAgICAgICAgIAgICAgIICAAAAAAAAAAAAAAAAAAAAAAHCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgEBAgHBQIDAgMFBQIDBwYDAwIDCAgDAwMECAgDAwgIAwMGBgYGBgYGBgYGBgYEBAQEBQUFBQkJBgYJCQYGDAwJCQwMCQkGBgYGBgYGBgYFBgQGBQYECQkDAwYGAwMHBwQEBgYCAgQEBAQGBgMDAwQFBAUFBwYHBgMDBgcGBwYHBgcICAICCAgIAgIICAIDCAgIAgICAgICCAICCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAQECAgICAgICAgICAgICAgICAgICAgICAgIAQsWCQcJBwAAAAAAAAAAAAAAAAAAAAAGCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggGCAYIBggGCAYIBggGCAYIBggGCAYIBgYGBgYGBgYGBgYGBgYGBgYCAgICCAYIBggGCAYIBggGCAYJBwkHCQcJBwkHBwYHBgkHCQcJBwkHCQcIBggGCAYIBgICCAYHBgcGBwYHBgcGAAAAAAYECgcGBQYFCAYGBgYGBwYHBgcGCAYJBgAADBgJAAMDAwQHBwsIAgQEBQcDBAMDBwcHBwcHBwcHBwMDBwcHBwwHCAkJCAcJCQMGCAcJCQkICQkIBwkHCwcHBwMDAwUHBAcHBgcHAwcHAwMGAwsHBwcHBAcDBwUJBQUFBAMEBwcHCQgJCQkHBwcHBwcGBwcHBwMDAwMHBwcHBwcHBwcHBwUHBwcEBggJCQwEBAcMCQkHBwcHBwYJCgcDBAQJCwcHAwcHBwcHBwcMBwcJDAsHDAQEAwMHBgUHAgcEBAYGBwMDBAsHCAcICAMDAwMJCQkJCQkDBAQEBAQEBAQEBAcDCAcHBQMJBwcFCAcHBwQEBAoKCgcJBwMIBwkGCQYHBwQHBwcHCQcJCAcIBwcDBwQHBAkHCQcJBwkECQQIBwcDBwUJBwkHBwUHBQcJCQcHBQcFCAcGBA0MBgwGDAYGDAkHBwcHBwkICQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQcMDAwMDAcHBwwNCwkJBggHBgYJCQUHAgQLBAcEBAcEBwcJBgkGCAcIBwgHCQcJBwkHCQcJBwMDAwMDAwMDBgMIBgcHAwkHCQcJBwkHCQQIBwcDCQcJBwkHCQcLCQcFAwcHDAsJBwMLCQsJCwkHBQMEBwcKCgoKBAQEBAcJCgQJCQkDBwgHCAcJAwgHCQkICQkIBwcHBwkJAwcHBQcDBwcFBQcHAwcFBwUFBwcGBwYJCQMHBwcJCAoHCQgDAwYNDAoHCAkHCAgHCAgLBwkJBwgJCQkJCAkHCAkHCQgLCwoKCAkMCQcHBgQHBwkGBwcGBwkHBwcHBgUFCQUHBgkJCAkHBgkHBwcEBgcDAwMLCgcGBQcGBQwNCAQEBAQEBAQEBAQEBAQFBAMEBAMHBwUGBwMFBwcDBgYGBwcDBAcGBwcGBgcGCAgGBgYDBQkDBgYGBgYICAgIBwcHBwUGBwMFBwMGBgYHBAcHBwYHBggIAwcGBwcAAAAABAQEBQICAwICAwIDAgYGBgYGBgYGBgYGBAYJCQMJBgYGCQkJCQkDCQkJCQkJCQkICQkJCQkDAwkJCQkHBgYGBgYKCwUGCgsFBggHCQkJCQkJCQkJCQkJCQkJCQMDAwMDCQkAAAAAAAAAAAAAAAAAAAAABwwJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBAQJBwUCAwIDBQUCAwgHAwMCAwkJAwMDBQkJAwMJCQMDBwYGBgcGBgYHBgYGBAQEBAYGBgYKCgYGCgoGBg0NCgoNDQoKBwcHBwcHBwcHBQYFBwUGBQkJAwMHBwMDBwcFBQYGAgIEBAUFBgYDAwMFBQUFBQgHCAcDAwcHBwcHBwcHCQkCAgkJCQIDCQkDAwkJCQMDAwMDAwkCAgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQQEBAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQIMGAoICggAAAAAAAAAAAAAAAAAAAAABgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcIBwgHCAcIBwgHCAcIBwgHAwMDAwkHCQcJBwkHCQcJBwkHCggKCAoICggKCAkHCQcKCAoICggKCAoIBwUHBQcFBwcDAwkHCQcJBwkHCQcJBwAAAAAHBAsIBwUHBQkHBwYHBggGCAYIBgkHCQcAAA0aCgAEBAMFBwcMCQIEBAUIBAQEBAcHBwcHBwcHBwcEBAgICAcNCQkJCQkICgkDBgkHCwkKCQoJCQcJCQ0HCQcEBAQFBwQHBwcHBwMHBwMDBwMLBwcHBwQHBAcFCQcHBwQDBAgJCQkJCQoJBwcHBwcHBwcHBwcDAwMDBwcHBwcHBwcHBwcFBwcHBQcJCgoNBAQHDQoJBwcHBwcGCQsHAwQFCgwHCAMICAcHCAcHDQkJCg0MBw0EBAMDBwYHCQIHBAQHBwcEAwQOCQkJCQkDAwMDCgoKCQkJAwQEBAQEBAQEBAQHAwkHBwcDCQcJBwkHCAgEBAQLCwsHCgcDCQcJBwkHBwcECQcJBwkICQkHCQcHAwcEBwQJBwkHCgcJBAkECQcHAwcFCQcJBwcHBwcHCgkIBwYIBQgHBwUPDQcNBw0HBw0JCAgICAgJCAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIDQ0NDQ0ICAgNDgwKCgcJCAcHCgoGCAIFDAUIBQUIBQkHCQcJBwkHCQcJBwoHCgcKBwkHCQcDAwMDAwMDAwYDCQcHBwMJBwkHCgcKBwkECQcIBAkHCQcJBwkHDQkJBwMJBw0MCgcDDQkNCQ0JCQcDBAcICwsLCwQEBAQJCgsFCgsKAwkJCQkHCQMJCQsJCAoJCQgHCQcJCgMJCAYHAwcHBwYHBwMHBwcFBgcHBgcHCQkDBwcHCQkLBwkJAwMGDg0LCAgJCQkJBwkJCwgJCQgJCwkKCQkJBwgLBwoJCwsKCwgJDQkHBwcFCAcJBgcHBgcJBwcHBwcFBwkHBwcLDAgJBwcKBwcHBQcHAwMDDAsHBgcHBgUNDgkEBAQEBAQEBAQEBAQEBQQDBAQEBwcFBwgDBQgIAwcGBggIAwUHBwcHBgYHBwkIBgYGAwUJAwcHBgYHCQkJCQcHBwcFBwgEBQgEBwYGCAUHBwcGBwcJCAMHBgcHAAAAAAQEBQUDAwMDAwMDAwIHBwcHBwcHBwcHBwQHCgoECgcHBwoKCgoKAwoKCgoKCgoKCAoKCgkJAwMKCgoKBwcHBwYGCwwFBwsMBQcICAoKCgoKCgoKCgoKCgoKCgoDAwMDAwoKAAAAAAAAAAAAAAAAAAAAAAcNCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgQECggFAwMDAwYGAwMICAMDAwMJCQMDBAUJCQMDCQkDAwcHBwcHBwcHBwcHBwQEBAQGBgYGCwsHBwsLBwcODgsLDg4LCwgICAgICAgIBwYHBQcGBwUKCgMDCAgDAwgIBQUHBwMDBAQFBQcHAwMEBQYFBgYICAgIAwMHCAcIBwgHCAoKAwMKCgoCAwoKAwMKCgoDAwMDAwMKAwMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoEBAQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCDRoLCQsJAAAAAAAAAAAAAAAAAAAAAAcLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwMDAwMKBwoHCgcKBwoHCgcKBwsJCwkLCQsJCwkJBwkHCwkLCQsJCwkLCQkHCQcJBwkHAwMKBwkHCQcJBwkHCQcAAAAABwUMCQgGCAYJBwcHBwcJBwkHCQcKBwoHAAAPHgsABAQFBQgIDQoDBQUGCQQFBAQICAgICAgICAgIBAQJCQkIDwkKCwsKCQsKAwcKCAsKDAoMCwoJCgkPCQkIBAQEBQgFCAgICAgECAgDAwcDDQgICAgFCAQIBwsHBwgFAwUJCQkLCgoMCggICAgICAgICAgIAwMDAwgICAgICAgICAgIBggICAUICQsLDwUFCA8MCwgICAgIBwsMCAQFBQwNCAkFCQkICAkICA8JCQwPDggPBQUDAwgHBwkDCAUFCAgIBAMFDgkKCQoKAwMDAwwMDAoKCgMFBAUFBQUFBQUFCAMKCAgIAwsICQcKCAkJBQUFDQ0NCAsIAwoICwgLCAgIBQkICQgLCQsKCAoICAMIBAgFCggKCAwICwULBQoICQQJBgoICggICAgICAwLCQgHCQUKCAgFEQ8IDwgPCAgPCwkJCQkJCwkLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCQ8PDw8PCQkJDxAOCwsICgkICAsLBwkDBQ0FCQUFCQUJCAsICwgKCAoICggLCAsICwgKCAoIAwMDAwMDAwMHAwoHCAgDCggLCAwIDAgLBQoICQQKCAoICggLCA8LCQcDCQgPDQwIAw8LDwsPCwkHAwUICQ0NDQ0FBQUFCQwNBgwMCwMJCgoKCAoDCgsLCgoMCgoJCQkJCwsDCQkHCAMICQcHCAgDCAcIBwcICAcICAsMAwgICAwKDQgLCgMDBxAPDQkKCwkKCggKCg4JCwsJCgsKDAoKCwkKCwkLCQ4PDA0KCw8LCAkIBQkICQcICAcICggICAgIBwcLBwkICwsJCwgICwgICAUICAMDAw4MCAcHCAcGDxAKBQUFBQUFBQUFBQUFBQYFAwUFBAgIBggJAwYJCQMIBwcJCQMFCQgJCAcHCAgKCgYGBgQGDAMICAcHCAoKCgoICAgIBggJBAYJBAgHBwkFCQkIBwgICgoDCAcICQAAAAAFBQUGAwMEAwMDAwMCCAgICAgICAgICAgFCAsLBAsICAgLCwsLCwMLCwsLCwsLCwoLCwsLCwQECwsLCwgICAgHBwwOBggMDgYICgkLCwsLCwsLCwsLCwsLCwsLAwMDAwMLCwAAAAAAAAAAAAAAAAAAAAAIDwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsFBQsJBgMDAwMGBgMDCgkEBAMDCwsEBAQGCwsEBAsLBAQICAgICAgICAgICAgFBQUFBwcHBwwMCAgMDAgIEBANDRAQDQ0JCQkJCQkJCQgHCAYIBwgGDAwEBAkJBAQJCQYGCAgDAwUFBgYICAQEBAYHBgYGCgkKCQQECAkICQgJCAkLCwMDCwsLAgMLCwMECwsLAwMDAwMDCwMDCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLBQUFCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLAg8eDQoNCgAAAAAAAAAAAAAAAAAAAAAIDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwkICQgJCAkICQgJCAkICQgJCAkICQgJCAoICggKCAoICggKCAoICggDAwMDDAgMCAwIDAgMCAwIDAgNCg0KDQoNCg0KCggKCA0KDQoNCg0KDQoJBwkHCQcJCAMDDAgKCAoICggKCAoIAAAAAAgFDgoJBwkHCwgICAgICggKCAoICwgMCAAAECAMAAQEBQYJCQ4LAwUFBgkEBQQECQkJCQkJCQkJCQQECQkJCRALCwwMCwoMCwMICwkNCwwLDAsLCQsLDwsJCQQEBAcJBQkJCAkJBAkIBAMIAw0ICQkJBQgECAcLBwcHBQMFCQsLDAsLDAsJCQkJCQkICQkJCQMDAwMICQkJCQkICAgICQYJCQkGCQkMDBAFBQkQDAsJCQkJCQgLDQkEBQUMDgkKBQkJCQkJCQkQCwsMEQ8JEAUFBAQJCAcJAwkFBQgICQQEBRELCwsLCwMDAwMMDAwLCwsDBQQFBQUFBQUFBQkDCwgJBwMMCQkHCwkJCQUFBQ0NDQkMCQMLCAwIDAgJCQULCQsJDAoMCwkLCQkDCQQJBQsICwgMCQsFCwULCAkECQYLCAsICQcJBwkMCwkJBwoFCgkIBhIQCBAIEAgIEAwJCgkKCgsKCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLDAoQEBAQEAoKChARDwwMCQsKCAgMDAcKAwYOBQoGBgoGCwkMCAwICwkLCQsJDAkMCQwJCwgLCAMDAwMDAwMECAMLCAgJAwsIDAkMCQwJCwULCAoECwgLCAsIDAgPCwkHAwsJEA4MCQMPCw8LDwsJBwQFCQoNDQ0NBQUFBQsNDQYMDAwDCwsLCwkLAwsLDQsKDAsLCgkJCwsMAwkJBwgDCAkIBwgJAwgICQcHCQkICAgLDQMICQgNCw4JDAsDAwgREA0JCgwLCwsJCwsOCgwMCQsNCwwLCwwJCgsLDAoNDg0OCwwQDAkJCQYJCQoHCAgHCAsICQgJCAcHDQcJCAsLCgwJCAwJCQgGCAgEAwMPDQgHBwgIBxARCwUFBQUFBQUFBQUFBQUGBQMFBQQJCQYICgMGCgkDCAcHCgoDBgkICQkHCAkICwoGBgYEBwwDCAgHBwkLCwsLCQkJCQYICgUHCQUIBwcKBgkJCQgJCAsKAwkHCQkAAAAABQUGBwMDBAMDAwMDAwgICAgICAgICAgIBQgMDAUMCAgIDAwMDAwDDAwMDAwMDAwKDAwMCwsEBAwMDAwJCAgICAgNDwYIDQ8GCAoJDAwMDAwMDAwMDAwMDAwMDAQDAwMDDAwAAAAAAAAAAAAAAAAAAAAACRAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMBQUMCgcDBAMEBwcDBAoJBAQDBAsLBAQFBgsLBAQLCwQECQgICAkICAgJCAgIBQUFBQgICAgNDQkJDQ0JCRISDg4SEg4OCQkJCQkJCQkJBwgGCQcIBg0NBAQJCQQECgoGBggIAwMFBQYGCAgEBAUGBwYHBwoJCgkEBAkKCQoJCgkKDAwDAwwMDAMDDAwDBAwMDAMDAwMDBAwDAwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAUFBQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAIQIA4LDgsAAAAAAAAAAAAAAAAAAAAACA0NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJAwQDBAwJDAkMCQwJDAkMCQwJDgsOCw4LDgsOCwsICwgOCw4LDgsOCw4LCQcJBwkHCwkDBAwJCwgLCAsICwgLCAAAAAAJBg8LCQcJBwwJCQgJCAsICwgLCAwJDAkAABEiDQAFBQUGCQkPCwMGBgcKBQYFBQkJCQkJCQkJCQkFBQoKCgkRCwsMDAsKDAsFCQsJDQsMCwwLCwkLCxELCwkFBQUHCQYJCQkJCQUJCQQDCAMNCQkJCQYIBAkHCwcJCAYFBgoLCwwLCwwLCQkJCQkJCQkJCQkFBQUFCQkJCQkJCQkJCQkHCQkJBgkKDQ0RBgYJEQ0MCQkJCQkIDA4JBAUFDQ8JCgUKCgkJCwkJEQsLDBEQCREGBgQECQgJCwMJBgYJCQkFBAYRCwsLCwsFBQUFDAwMCwsLBQYEBgYGBgYGBgYJAwsICQgFDAkLCQsJCgoGBgYODg4JDAkFCwgMCQwJCgkGCwkLCQwKDAsJCwkJAwkECQYLCQsJDAkLBgsGCwgJBAkGCwkLCQkICQgJDA0KCQgLBgsJCQYTEQkRCREJCREMCgoKCgoMCwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKEREREREKCgoREhANDQkLCgkJDQ0ICgMGDwYKBgYKBgsJDAkMCQsJCwkLCQwJDAkMCQsJCwkFBQUFBQUFBAkDCwgICQMLCQwJDAkMCQsGCwgKBAsJCwkLCQwJEQsLCQQLCREPDQkEEQsRCxELCwkEBgkKDg4ODgYGBgYLDQ0GDQ4NAwsLCwsJCwULCw0LCwwLCwsJCwsNDQULCggJAwkKCQgJCQMICQkHCAkJCAkJCw0DCQkJDQsPCQwLBQUJEhEPCgsLCwsLCQwLDwoMDAoKDQsMCwsMCQsNCw0KDw8NDgoMEAwJCQkGCgkLCAkJBwoLCQkJCQkICQ0HCgkODgsMCQkNCQkJBgkIBAUDDw4JBwkJCAcREgwGBgYGBgYGBgYGBgYGBwYDBgYFCgkHCQoDBwoKAwkICAoKAwYKCQoJCAgJCQwLBwcHBAcMAwkJCAgJDAwMDAoKCgkHCQoFBwoFCQgICgYKCgkICQkMCwMJCAkKAAAAAAUFBgcEAwQDAwQDBAMJCQkJCQkJCQkJCQUJDQ0FDQkJCQ0NDQ0NBA0NDQ0NDQ0NCw0NDQwMBAQNDQ0NCgkJCQgIDhAHCQ4QBwkLCg0NDQ0NDQ0NDQ0NDQ0NDQ0EBAQEBA0NAAAAAAAAAAAAAAAAAAAAAAkRDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQUFDQoHBAQEBAcHBAQLCgQEBAQMDAQEBQYMDAQEDAwEBAoJCQkKCQkJCgkJCQYGBgYICAgIDg4JCQ4OCQkTEw4OExMODgoKCgoKCgoKCQgJBwkICQcNDQUECgoFBAoKBwcJCQQEBgYHBwkJBAQFBggHBwcLCgsKBAQJCgkKCQoJCg0NAwMNDQ0DBA0NBAQNDQ0EBAQEBAQNAwMNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0FBQUNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0CESIPCw8LAAAAAAAAAAAAAAAAAAAAAAkODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQUEBQQMCQwJDAkMCQwJDAkMCQ8LDwsPCw8LDwsLCQsJDwsPCw8LDwsPCwsJCwkLCQsJBQQMCQsJCwkLCQsJCwkAAAAACQYQCwoHCgcMCQkJCQkLCQsJCwkNCQ0JAAATJg4ABQUGBwsLEQ0EBgYHCwUGBQULCwsLCwsLCwsLBQULCwsLEw0NDg4NDA8NBgoNCw8NDw0PDg0MDQ0TDQwMBQUFBwsGCgsKCwsGCwoEBAkEEAoLCwsGCgUKCQ0JCQkGBgYLDQ0ODQ0PDQoKCgoKCgoLCwsLBgYGBgoLCwsLCwoKCgoLCAsLCwcKDA4OEwYGChMPDgoKCgsLCQ4QCgQHBw8RCwwGCwsLCgwLCxMNDQ8TEgsTBwcEBAoJCQwDCwYGCgoLBQQHEQ0NDQ0NBgYGBg8PDw0NDQYGBQYGBgYGBgYGCwQNCgwJBg4LDAkNCwsLBgYGEBAQCw8LBg0KDgoOCgsLBg0KDQoODA4NCw0LCwQLBgsGDQoNCg8LDgYOBg0KDAYMBw0KDQoMCQwJCg8OCwsIDAgMCwoHFRMKEwoTCgoTDgsLCwsLDQwNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0OCxMTExMTCwsLExQRDg4KDAsKCg4OCAsEBxEGCwcHCwcNCg4KDgoNCw0LDQsPCw8LDwsNCg0KBgYGBgYGBgQKBA0JCgsEDQoOCw8LDwsOBg0KDAUNCg0KDQoNChMNDAkEDQoTEQ8LBhMNEw0TDQwJBAYLCxAQEBAGBgYGDQ8PBw8QDwQNDQ0NDA0GDQ0PDQwPDQ0MDAwNDg4GDAsICgQKCwoICgsECgkLCQkLCwkKCg4QBAoLChANEAoODQYGChQTDwsMDg0MDQoNDRILDg4LDA8NDw0NDgwMDg0ODRERDxENDhMOCgsKBwsLDgkKCggKDQoLCQsKCAkQCQsKDg4MDgsKDgoLCgcKCgQGBBEPCggJCgkIExQNBgYGBgYGBgYGBgYGBgcGBAYGBQsKCAoLBAcLCwQKCQkLCwQHCwoLCgkJCgoNDAkJCQQIEAQKCgkJCg0NDQ0LCwsKCAoLBQgLBQoJCQsHCwsKCQoKDQwECgkKCwAAAAAGBgcIBAQFBAQEBAQDCgoKCgoKCgoKCgoGCg4OBQ4KCgoODg4ODgQODg4ODg4ODgwODg4ODgUFDg4ODgsKCgoJCQ8SBwoPEgcKDAsODg4ODg4ODg4ODg4ODg4OBAQEBAQODgAAAAAAAAAAAAAAAAAAAAALEw4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4GBg4MCAQEBAQICAQEDAsFBQQEDg4FBQUHDg4FBQ4OBQULCgoKCwoKCgsKCgoGBgYGCQkJCRAQCgoQEAoKFRUQEBUVEBALCwsLCwsLCwoJCgcKCQoHDw8FBQsLBQULCwcHCgoEBAYGBwcKCgUFBQcJBwgIDAsMCwUFCgsKCwoLCgsODgQEDg4OAwQODgQFDg4OBAQEBAQEDgQEDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OBgYGDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAhMmEAwQDQAAAAAAAAAAAAAAAAAAAAAKEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0LDQsNCw0LDQsNCw0LDQsGBAYEDwsPCw8LDwsPCw8LDwsQDBAMEAwQDBAMDQoNChANEA0QDRANEA0MCQwJDAkNCgYEDwsNCg0KDQoNCg0KAAAAAAoHEg0LCAsIDgsLCgsKDQoNCg0KDgsPCwAAFSoQAAYGBgcMDBMOBAcHCAwGBwYGDAwMDAwMDAwMDAYGDAwMDBUNDg8PDg0QDgYLDgwRDhAOEA8ODA4NFQ4ODQYGBggMBwwLCwsMBgsLBQQKBBALDAsLBwsGCwsPCgsJBwYHDA0NDw4OEA4MDAwMDAwLDAwMDAYGBgYLDAwMDAwLCwsLDAgMDAwHCw0PDxUHBwwVEA8MDAwMCwoPEQwGBwgQEwwNBgwMDAwNDAwVDQ0QFRQMFQcHBQUMCgsOBAwHBwsLDAYFBxUNDg0ODgYGBgYQEBAODg4GBwcHBwcHBwcHBwwEDgsNCQYPDA4LDgwMDAcHBxISEgwQCwYOCw8LDwsMDAcNDA0MDw0PDgwODAwEDAYMBw4LDgsQDA8HDwcOCwwGDAgOCw4LDQkNCQwQEAwMCQ0IDgwLCBcVCxULFQsLFQ8MDQwNDQ8NDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw0VFRUVFQ0NDRUWExAQCw4MCwsQDwkNBAcTBw0HBw0HDQwPCw8LDgwODA4MEAsQCxAMDgsOCwYGBgYGBgYFCwQOCgoMBA4LDwwQDBAMDwcOCw0GDgsOCw4LDgsVDw4LBQ0MFRMQDAYVDxUPFQ8OCwUHDA0SEhISBwcHBw0QEQgQERAEDQ4ODg0OBg4OEQ4OEA4ODQwODhIQBg4MCQsECgwKCQsMBAoLCwsJDAwKCgsOEAQKDAoQDhILDw4GBgsWFRIMDQ8NDg4LDg4TDQ8PDA4RDhAODg8MDRAOEA4SFBETDg8VDwwMCwgMDA4KCwsJCw0LDAoLCwoLEQoMCxAQDQ8LCxALDAwICwsFBgQTEQwJCwsKCRUXDgcHBwcHBwcHBwcHBwcIBwYHBwYMCwgLDQYIDQwGCwoKDQ0GBwwLDAsKCgwLDw4LCwsFCRIGCwsKCgsPDw8PDAwMCwgLDQYJDAYLCgoNBwwMCwoMCw8OBgsKCwwAAAAABwcHCQQEBQQEBAQEAwsLCwsLCwsLCwsLBwsQEAYQCwsLEBAQEBAEEBAQEBAQEBANEBAQDw8FBRAQEBAMCwsLCgoRFAgLERQICw0MEBAQEBAQEBAQEBAQEBAQEAUEBAQEEBAAAAAAAAAAAAAAAAAAAAAADBUQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBwcQDQkEBQQFCQkEBQ0MBQUEBQ8PBQUGCA8PBQUPDwUFDAsLCwwLCwsMCwsLBwcHBwoKCgoREQsLERELCxcXEhIXFxISDAwMDAwMDAwLCQsICwkLCBERBgYMDAYGDQ0ICAsLBAQHBwgICwsFBQYICQgJCQ0MDQwFBQsNCw0LDQsNEBAEBBAQEAMEEBAEBRAQEAQEBAQEBRAEBBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAcHBxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAMVKhIOEg4AAAAAAAAAAAAAAAAAAAAACxISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwODA4MDgwODA4MDgwODA4MBgUGBRAMEAwQDBAMEAwQDBAMEg4SDhIOEg4SDg4LDgsSDhIOEg4SDhIODgsOCw4LDQwGBRAMDgsOCw4LDgsOCwAAAAALCBMODAkMCQ8MDAsMCw4LDgsOCxAMEAwAABgwEgAHBwgJDQ0VEAUICAkOBwgHBw0NDQ0NDQ0NDQ0HBw4ODg0YDxARERAPExEGDBANExETEBMREA4RDxcPEA8HBwcMDQgNDgwODQcODgUGDAYUDg0ODggMBw4LEQsMDAgGCA4PDxEQERMRDQ0NDQ0NDA0NDQ0GBgYGDg0NDQ0NDg4ODg0KDQ0NCA0PEhIYCAgNGBMRDQ0NDQ4MERQNBgkJEhUPDwgODQ0NDw0NGA8PExgXDRgICAUFDQwMEAQNCAgMDA0HBQgaDxAPEBAGBgYGExMTERERBggICAgICAgICAgNBhAMDwwGEQ0QDBANDg4ICAgUFBQNEw4GEAwRDBEMDQ0IDw0PDREPERANEA0NBg0HDQgRDhEOEw0RCBEIEAwOBw4JEQ4RDg8MDwwNExIODQsPCRANDAkaGAwYDBgMDBgRDg8ODw8RDxERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERIPGBgYGBgPDw8ZGRYSEg0QDgwMEhILDwUJFQgPCQkPCQ8NEQwRDBANEA0QDRMOEw4TDREOEQ4GBgYGBgYGBQwGEAwMDQYRDhENEw0TDREIEAwPBxEOEQ4RDhEOFxEQDAUPDRgVEw8GFxEXERcREAwFCA0OFBQUFAgICAgPExQJExQSBg8QEBAPEQYQEBMREBMREA8OEA8TEgYQDgsOBg4OCwsODQYMDA4LCw0ODA4NEhIGDg0OEhAVDREQBgYMGRgWDg8RDxAQDRAQFg8REQ4QExETERARDg8SDxIQFhcTFRARGBENDg0JDg0QCw0NCw4RDQ0NDgwLDBQLDg0TFA8RDQwSDQ0OCQwMBQYGFhQOCwwNDAoYGhEICAgICAgICAgICAgICQgGCAgHDg0KDA4GCQ4OBgwLCw4OBggODQ4NCwsNDBEPDAwMBgoVBgwMCwsNEREREQ4ODg0KDA4HCg4HDAsLDggODg0LDQwRDwYNCw0OAAAAAAgICQoFBQYFBQUFBQQNDQ0NDQ0NDQ0NDQgNEhIHEg0NDRISEhISBRISEhISEhISDxISEhERBgYSEhISDg0NDQwMExYJDBMWCQwPDhISEhISEhISEhISEhISEhIFBQUFBRISAAAAAAAAAAAAAAAAAAAAAA0YEhISEhISEhISEhISEhISEhISEhISEhISEhISEggIEg8KBQYFBgoKBQYPDgYGBQYREQYGBwkREQYGEREGBg4NDQ0ODQ0NDg0NDQgICAgMDAwMFBQNDRQUDQ0aGhQUGhoUFA4ODg4ODg4ODQsNCQ0LDQkTEwYGDg4GBg4OCQkMDAUFCAgJCQ0NBgYHCQsJCgoPDg8OBgYNDg0ODQ4NDhISBQUSEhIEBRISBQYSEhIFBQUFBQUSBQUSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIICAgSEhISEhISEhISEhISEhISEhISEhISEhIDGDAVEBUQAAAAAAAAAAAAAAAAAAAAAAwUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFDw0PDQ8NDw0PDQ8NDw0PDQ8NDw0PDQ8NEA0QDRANEA0QDRANEA0QDQYFBgUTDRMNEw0TDRMNEw0TDRUQFRAVEBUQFRARDhEOFRAVEBUQFRAVEBAMEAwQDA8NBgUTDREOEQ4RDhEOEQ4AAAAADQkWEA4LDgsRDQ0MDQwQDBANEA0SDRMNAAAbNhQACAgICg8PGBIFCQkLEAgJCAgPDw8PDw8PDw8PCAgQEBAPGxISFBQSERUTCA0SDxcTFREVFBIQExEcERIRCAgIDA8JDw8ODw8HDw8GBg4GFg8PDw8J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FxIREhIRDw8aDxMRGhsUGBIRGRIREgwREQcJBx0aEg4PEhAOISMXCwsLCwsLCwsLCwsLCw0LBwsLCRMSDREUBw0UEwcRDw8UFAcMExETEg8QEhEXFQ8PDwgOHAcREQ8PEhcXFxcTExMSDREUCQ4TCREPDxQMExMSEBIRFxUHEg8SEwAAAAALCwwOBwcIBwcHBwcFERERERERERERERELERkZCRkREREZGRkZGQcZGRkZGRkZGRUZGRkYGAgIGRkZGRMREREQEBsfDREbHw0RFRMZGRkZGRkZGRkZGRkZGRkZBwcHBwcZGQAAAAAAAAAAAAAAAAAAAAASIRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkLCxkUDgcIBwgODgcIFRMICAcIGBgICAkMGBgICBgYCAgTERERExERERMRERELCwsLEBAQEBsbEhIbGxISJCQcHCQkHBwTExMTExMTExIPEQ0SDxENGhoJCRMTCQkUFA0NEREHBwsLDQ0REQgICQwPDQ4OFRMVEwgIEhQSFBIUEhQZGQcHGRkZBQcZGQcIGRkZBwcHBwcHGQcHGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCwsLGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBCFCHBYcFgAAAAAAAAAAAAAAAAAAAAARHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxYRFhEWERYRFhEWERYRFhEWERYRFhEWERYRFhEWERYRFhEWERYRFhEJBwkHGhEaERoRGhEaERoRGhEcFhwWHBYcFhwWGBIYEhwWHBYcFhwWHBYVDxUPFQ8WEQkHGhEYEhgSGBIYEhgSAAAAABIMHhYTDhMOGBISERIRFhEWERYRGRIaEgAAJUocAAoKCw0VFSEZBwwMDhYKDAoKFRUVFRUVFRUVFQoKFhYWFSYZGRsbGRcdGwkTGRUfGx0ZHRsZFxsZJhkXFwoKChEVDBQVExUUChUVBwkTBx8VFRUVDBIKFREbERESDAkMFhkZGxkbHRsUFBQUFBQTFBQUFAkJCQkVFRUVFRUVFRUVFQ8VFRUNFBcbGyUMDBQlHRoUFBQVFRIaHhQJDg4cIRcXCxYVFRQXFRUlGRkdJSMVJQwMCAgUEhEXBhUMDBMTFQoIDCUZGRkZGQkJCQkdHR0bGxsJDAsMDAwMDAwMDBUIGRIXEgkbFRcRGRUWFgwMDB8fHxUdFQkZEhsTGxMVFAwZFBkUGxcbGRQZFBUHFQsVDBsVGxUdFRsMGwwZEhcKFw4bFRsVFxIXEhQdHhUVERcPGBQTDiglEyUTJRMTJBsWFhYWFhoXGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxYlJSUlJRYWFiYnIhwcFBgWExMcGxAWBw0hDBYNDRYNGRQbExsTGRQZFBkUHRUdFR0VGxUbFQkJCQkJCQkHEwkZExMVBxsVGxUdFR0VGwwZEhcKGxUbFRsVGxUmGxcRBxkUJSEdFwkmGyYbJhsXEQgMFRYfHx8fDAwMDBkdHw4dHhwIGRkZGRcbCRkZHxsYHRsZFxcXGR4cCRcVERUIFBUTEBUVCBMTFRERFRUSFBMaHQgUFRQdGSAUGxkJCRMnJSAWGBsZGBkUGRkiFhsbFhgfGx0bGRsXGBwZGxkiIx0hGBslGxQVFA4WFBkRFRUQFhkUFRQVExERHhEVEx4eFxsUExwUFBUOExIHCQkiHhUQERQSDyUoGgwMDAwMDAwMDAwMDAwODAkMDAoVFA8TFgkOFhYJExERFhYJDRUUFRQREhQTGhgSEhIJDx4JExMRERQaGhoaFRUVFA8TFgsPFgsTEREWDRUVFBIUExoYCRQRFBUAAAAADAwNDwgHCQcHCAcIBhMTExMTExMTExMTDBMcHAocExMTHBwcHBwIHBwcHBwcHBwYHBwcGhoJCRwcHBwVExQUEhIeIw8THiMPExgWHBwcHBwcHBwcHBwcHBwcHAgICAgIHBwAAAAAAAAAAAAAAAAAAAAAFSUcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcDAwcFw8ICAgIEBAICBgWCQkICBoaCQkKDhoaCQkaGgkJFRMUFBUTFBQVExQUDAwMDBISEhIeHhQUHh4UFCkpHx8pKR8fFhYWFhYWFhYUERMPFBETDx0dCgoWFgoKFhYPDxMTCAgNDQ8PExMJCQoOEQ8QEBgWGBYJCRQWFBYUFhQWHBwHBxwcHAYIHBwICRwcHAgICAgICBwHBxwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwc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JB4kHiQeJB4kHiQeJB4kHiQeJB4kHiQeJB4kHiQeJB4kHg8NDw0qHioeKh4qHioeKh4qHi4jLiMuIy4jLiMnHScdLiQuJC4kLiQuJCMbIxsjGyQeDw0qHicdJx0nHScdJx0AAAAAHRQyJB8YHxgnHh4bHhskGyQcJBwpHioeAAA6dCwAEBATFSAgNCcLExMXIhATEBAgICAgICAgICAgEBAiIiIgOycnKionIy0qDx0nIC8qLSctKickKic6JSYjEBAQGCATICAdICAQICANDR4NMSAgICATHRAgHSkcGxwTDhMiJycqJyotKiAgICAgIB0gICAgDw8PDyAgICAgICAgICAgFyAgIBQfIysrOhMTIDotKSAgICAhHSkwIBEVFS00IyMTIiAgICQgIDonJy06NyA6ExMNDSAdGyYKIBMTHR0gEA0TOScnJycnDw8PDy0tLSoqKg8TERMTExMTExMTIA0nHSMcDiogJhsnICIiExMTMDAwIC0gDycdKh0qHSAgEycgJyAqJConICcgIA0gESATKiAqIC0gKhMqEycdJBAkFiogKiAjHCMcIC0uIiAaJBcmIB0VPzodOh06HR05KiIjIiMjKSQpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqIzo5OTk5IyMjOz01LCwfJiIeHSwrGiMLFTMTIxUVIxUnICodKh0nICcgJyAtIC0gLSAqICogDw8PDw8PDw0dDSceHSANKiAqIC0gLSAqEycdIxAqICogKiAqIDopJhsNJyA6NC0jDzopOik6KSYbDRMgIzAwMDATExMTJy0xFi0wLA0nJycnIyoPJycvKiYtKickJCYlMCsPJiIaIA0gIR0aICANHR0hHRogIRwgHiktDSAgIC0nMh8qJw8PHT07MiIlKicmJx8nJzYjKioiJi8qLSonKiQlLCUrJzU2LjMmKjsqICEfFSIgJxsgIBkiKCAgHyAdGxswHCEeLzAkKh4eLB8gIBUeHQ0PDTUvIBkbIBwYOj4oExMTExMTExMTExMTExYTDhMTECEfFx0jDhYjIg4eGxsjIw4UIR8hIBscIB4oJR0dHQ4YLg4eHhsbHygoKCghISEfFx0jERgiER4bGyMUISEgHCAeKCUOHxsgIQAAAAATExUYDAwODAwMDAwKHx8fHx8fHx8f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JzMVIwczFSM3MxUjNzMVIzczFSM3MxUjNzMVI2d8fPl8fPl9ffl9ffp8fPl8fPqlfX35fX35fX36fHz5fX35fX19fX19+598fPl8fPl9ffl9ffp8fPl8fPqlfX35fX35fX36fHz5fX35fX19fX19+598fPl8fPl9ffl9ffp8fPl8fPqlfX0B8n19+nx8+X19+X19/Bt9fQRifHz5fHz6fX35fX35fHz5fHx9fX35fX35fX36fHz5fX35fX19fHz5fHz6fX35fX35fHz5fHx9fX35fX35fX36fHz5fX35fX0HSH19fX19fX19fX19fH19fX19fX19fX19fX19fXx9fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX18fX19fX19fX19fX18fX19fX19fX19fX19fHx8fHx8fHx8fHx9fX19fX19fX19fX18fX19fX19fX19fX0AAC7///2MBdYHSAA9AEEARQBJAE0AUQBVAFkAXQBhAGUAaQBtAHEAdQB5AH0AgQCFAIkAjQCRAJUAmQCdAKEApQCpAK0AsQC1ALkAvQDBAMUAyQDNANEA1QDZAN0A4QDlAOkA7QDxAAABESMVMxEjFTMRIxUzESMVMxUhETM1IxEzNSMRMzUjETM1IxEzNTMVMzUzFTM1MxUzNTMVMzUzFTM1MxUjFSUVMzUzFTM1MxUzNTMVMzUzFTM1FyMVMycjFTMnIxUzJyMVMycjFTMHFTM1MxUzNTMVMzUzFTM1MxUzNQUjFTM3FTM1MxUzNTMVMzUzFTM1BRUzNSEVMzUHNSMVJRUzNTMVMzUTNSMVIzUjFSM1IxUjNSMVIzUjFQcVMzUzFTM1MxUzNTMVMzUzFTM1EzUjFSM1IxUjNSMVIzUjFSM1IxUHFTM1MxUzNTMVMzUzFTM1MxUzNQXWfHx8fHx8fHz6KX19fX19fX19fXx9fH19fH19fH18fPsifH18fX18fX18fX19+X19+nx8+X19+X19+Xx9fH19fH19fPyYfX18fX18fX18ffsifAF2ffp8AfJ9fXx9fXx9fXx9fXx9fHx9fH19fH19fH19fH19fH19fH18fH18fX18fX18BdL+inz+in3+inz+in18AXV9AXZ9AXV9AXZ9AXV9fX19fX19fX19ffl9fX19fX19fX19fX35fX19fX19fX19fXx8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JSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAABAH/+UwIwBkgAFwBIuQAW/+CzCxE0ELj/9LMOETQPuP/gtAoRNAABuAMGsg4NDbgC+rIODgG4AvqyAAAHuQL/ABIv7TMv7DwQ/QAvMz8zMTABKysrAQcmJyYnJhE0NzY3NjcXBgcGFRQXFhcWAjAsaDNnOUpKOmY1ZC5sODwiHDgc/oAtfU6eruQBBfrgsZ5TeSru6vny9MKdlksA//8AXf5T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AAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAA//8ARgTXAVEGDQAWAvgAAP//AEYE1wGxBhkAFgL3AAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAD//wBIBNcBrQaKABYC9QAA//8ARgTXAeUGWgAWAvIAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAP//AEYE1wGxBrkAFgNJAAD//wBGBNcBsQdXABYDEgAA//8ARgTXAbEG0wAWA0sAAP//AEYE1wGxBz0AFgNIAAD//wBABNkBsQcuABYDSgAA//8AMATXAc8HdwAWA0cAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAP//AEb/1QGcAKQAFgL2AAD//wBG/vYBnABbABYC8wAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIAygEYAckFtwASAB4APrkAEALytwdACQo0BwccvALuABYC7AAGAvG0BwcTGQC4Au2yDQ0TuQLtABkv7TMv7RESOS/tAD/9Mi8rPzEwARQHBgcGFSM0JyYnJjU0NjMyFgMUBiMiJjU0NjMyFgHJGisFGjkZCiUaRjc5SQZINDJISDQySAUdQ3bDHJKIfpk6tn4tPV1c/DcySEgyM0pKAAABAMcBGAHPAiIACwAWvgAJAu4AAwLsAAAC7QAGL+0AP+0xMAEUBiMiJjU0NjMyFgHPTzc2TE01OE4BnTZPTjc2T04AAAIAxgEYAc0EVwALABcAKrkACQLusgMDFbwC7gAPAuwAAALtsgYGDLkC7QASL+0zL+0AP/0yL+0xMAEUBiMiJjU0NjMyFhEUBiMiJjU0NjMyFgHNTjg1TEo3OE5PNzVMSzY4TgPSOE5OODdOTv2UNk9ONzZPTgACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAABAAABJQFGAdMAAwAYvQACAu8AAQLrAAAC8LEFAS8Q5QA/7TEwASE1IQFG/roBRgElrgAAAQAAASUIRgHTAAMAGL0AAgLvAAEC6wAAAvCxBQEvEOUAP+0xMAEhNSEIRve6CEYBJa4AAAEAAAElEDoB0wADABi9AAIC7wABAusAAALwsQUBLxDlAD/tMTABITUhEDrvxhA6ASWuAAACAGP/5wasBdQADwAsAIq1GxANDjQnuP/gQBMQETQnIAkKNAogCQ40BiAJDjQCuP/gswkONA64/+BAIgkONCgQFxcMBBAeEQMMHiUDBB4dCRcoGQgsLBImEREIJhm4/8BADwsNNAAZARkAJiAhASFjLRD2Xe0vXSvtMy/tOS8REjk5AD/tP+0/7RESOS8SOTEwASsrKysr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AAAAJwDZAPUAAAEHBHQDXAAAAEJAMANQWmBakFqgWgQAWhBaMFpwWoBaBQBagFrAWtBaBABaWRwcQQLPPAE8HANoKwIBPLkCIgApACsBK101K11xcjX////9AAAFWQcrAiYAJAAAACcEewKrAAABBwSfBVAAAAAsQB8DzyPfI+8jAy8jAQAjLQECQQIAERsBAkECIEAZLTQgAC8rNQErNStdcTX//wBK/+gEHAbyAiYARAAAACcA2QD1AAABBwR6BJwAAAArsQNGuP/AQBUKDDQARlA/OUECzzwBPBwDaCsCATy5AiIAKQArAStdNSsrNQD////9/rsFWQZmAiYAJAAAACcEewKrAAABBwR9AzQAAAA1sQMkuP/AszU8NCS4/8CyEhc0uP/sQBMkJQcEQQIAERsBAkECIEAKLTQgAC8rNQErNSsrKzUA//8ASv67BBwFuAImAEQAAAAnANkA9QAAAQcEfQLIAAAAJkAWAx9HAQBHSC83QQLPPAE8HANoKwIBPLkCIgApACsBK101K101//8Aov67BOgFugImACgAAAEHBH0DXAAAABBACgEgDQEADQ4AC0EBK101//8AS/67BB4EPgImAEgAAAEHBH0C2gAAABS1AlAfYB8CuP/YtB8gBARBAStdNf//AKIAAAToBywCJgAoAAABBwR0A9QAAAALtgEAFhwBAkEBKzUA//8AS//oBB4GDQImAEgAAAEHBIUDKgAAABpAEwIAMhAyApAywDLQMgMAMjEKCkEBK11xNf//AKIAAAToBxQCJgAoAAABBwDXAXwBagAWQAoBAAwYAQJBAQEMuQIhACkAKwErNf//AEv/6AQeBaoCJgBIAAABBwDXAPAAAAAWQAoCAB4qCgpBAgEeuQLDACkAKwErNf//AKIAAAToBysCJgAoAAAAJwR8AqsAGQEHBHED/QAAADC3AtAWAQAWARa4/8BAFh8qNBYPAEgrAQAOEQECQQEOQBkoNA4ALys1ASs1KytdcTX//wBL/+gEHgcjAiYASAAAACcA1gDfAAABBwSTA0wAAABLtANfKAEouP/AQC8XGTQoIQBIKwIgQDs1IEAtMjQPIJ8gAgAgIwoKQQIfIC8gAvAgAV8gASBACQw0IAAvK11xcjUBK3IrKzUrK101AP//AKIAAAToBysCJgAoAAAAJwR8AqsAGQEHBG4DzwAAADRAJQITQDo1DxMfEwLfE/8TAg8TARMQAEgrAQAOEQECQQEOQBkoNA4ALys1ASs1K11xcis1//8AS//oBB4HIwImAEgAAAAnANYA3wAAAQcEkgMuAAAASkA3AyVAJjM0JUAXHjQlIgBIKwIgQDs1IEAtMjQPIJ8gAgAgIwoKQQIfIC8gAvAgAV8gASBACQw0IAAvK11xcjUBK3IrKzUrKys1//8AogAABOgHLAImACgAAAAnBHwCqwAZAQcEdQPoAAAAMbECJrj/wEAdHCA0sCYBACYBACYlDxBBAQAOEQECQQEOQBkoNA4ALys1ASs1K11xKzUA//8AS//oBB4HLAImAEgAAAAnANYA3wAAAQcEdANIAAAAUUAJA085fznvOQM5uP/AQDASGzQAOTghIkECIEA7NSBALTI0DyCfIAIAICMKCkECHyAvIALwIAFfIAEgQAkMNCAALytdcXI1AStyKys1KytdNQD//wCiAAAE6AcrAiYAKAAAACcEfAKrABkBBwSfBVAAAAAkQBgCsBMBABMdDhFBAQAOEQECQQEOQBkoNA4ALys1ASs1K3E1//8AS//oBB4G8gImAEgAAAAnANYA3wAAAQcEegR0AAAARUAzAwAlTyUCACUvICNBAiBAOzUgQC0yNA8gnyACACAjCgpBAh8gLyAC8CABXyABIEAJDDQgAC8rXXFyNQErcisrNStdNQD//wCi/rsE6AZoAiYAKAAAACcEfAKrABkBBwR9A1wAAAAkQBgCIBQBABQVAAtBAQAOEQECQQEOQAooNA4ALys1ASs1K101//8AS/67BB4FwgImAEgAAAAnANYA3wAAAQcEfQLaAAAAObUDUCZgJgK4/9hAHSYnBARBAiBAOzUgQC0yNA8gnyACACAjCgpBAgEkuQIiACkAKwErcisrNStdNQD//wBjAAACGAcsAiYALAAAAQcEdAI6AAAAC7YBAA4UAQJBASs1AP//AB8AAAHUBg0CJgSjAAABBwSFAcwAAAAPQAkBTxgBGAEiSCsBK3E1AP//ALr+uwGHBboCJgAsAAABBwR9AbgAAAALtgEABQYAA0EBKzUA//8AfP67AUkFugImAEwAAAEHBH0BegAAABZADwIJQG1vNE8JAQAJCgQHQQErcSs1//8AY/67Bd0F1AImADIAAAEHBH0DrAAAAAu2AgAdHgsLQQErNQD//wBE/rsEJwQ+AiYAUgAAAQcEfQLGAAAAC7YCABscCwtBASs1AP//AGP/5wXdBywCJgAyAAABBwR0BDgAAAAYQBECcDABkDCwMMAwAwAwLwMDQQErXXE1//8ARP/oBCcGDQImAFIAAAEHBIUDKgAAABZADwIALhAuApAuAQAuLQQEQQErXXE1//8AY//nBd0HKwImADIAAAAnBHwDHAAZAQcEcQRuAAAAMLcD0CYBACYBJrj/wEAWHyo0Jh8ASCsCAB4hAAdBAh5AGSg0HgAvKzUBKzUrK11xNf//AET/6AQnByMCJgBSAAAAJwDWAOAAAAEHBJMDTQAAAES0A18kASS4/8BAKRcZNCQdAEgrAhxALjI0nxwBABwfAAdBAh8cLxwC8BwBXxwBHEAJDDQcAC8rXXFyNQErcis1KytdNf//AGP/5wXdBysCJgAyAAAAJwR8AxwAGQEHBG4EQAAAADRAJQMjQDo1DyMfIwLfI/8jAg8jASMgAEgrAgAeIQAHQQIeQBkoNB4ALys1ASs1K11xcis1//8ARP/oBCcHIwImAFIAAAAnANYA4AAAAQcEkgMvAAAAQ0AxAyFAJjM0IUAXHjQhHgBIKwIcQC4yNJ8cAQAcHwAHQQIfHC8cAvAcAV8cARxACQw0HAAvK11xcjUBK3IrNSsrKzUA//8AY//nBd0HLAImADIAAAAnBHwDHAAZAQcEdQRgAAAAMbEDNrj/wEAdHCA0sDYBADYBADY1HiFBAgAeIQAHQQIeQBkoNB4ALys1ASs1K11xKzUA//8ARP/oBCcHLAImAFIAAAAnANYA4AAAAQcEdANIAAAATEALA081fzXfNe81BDW4/8BAKhIbNAA1NB0eQQIcQC4yNJ8cAQAcHwAHQQIfHC8cAvAcAV8cARxACQw0HAAvK11xcjUBK3IrNSsrXTX//wBj/+cF3QcrAiYAMgAAACcEfAMcABkBBwSfBcgAAAAgQBUDACMtHiFBAgAeIQAHQQIdQBkoNB0ALys1ASs1KzX//wBE/+gEJwbyAiYAUgAAACcA1gDgAAABBwR6BHQAAAA+QC0DACFPIQIAISscH0ECHEAuMjSfHAEAHB8AB0ECHxwvHALwHAFfHAEcQAkMNBwALytdcXI1AStyKzUrXTX//wBj/rsF3QZoAiYAMgAAACcEfAMcABkBBwR9A6wAAAAgQBUDACQlCwtBAgAeIQAHQQIeQAooNB4ALys1ASs1KzX//wBE/rsEJwXCAiYAUgAAACcA1gDgAAABBwR9AsYAAAApQBkDACIjCwtBAhxALjI0nxwBABwfAAdBAgEguQIiACkAKwErcis1KzUA//8AY//nBqwHLAImBGoAAAEHAI0BxwFqAB9AEQIAMAFvMPAwAjAlGUgrAgEtuQIhACkAKwErXXE1AP//AET/6AUABcICJgRrAAABBwCNAPQAAAAhQBMCADABTzBfMI8wAzAlMUgrAgEtuQIiACkAKwErXXE1AP//AGP/5wasBywCJgRqAAABBwBDAcMBagAgQAkCDy4B/y4BLiW4/+K0SCsCAS25AiEAKQArAStdcTX//wBE/+gFAAXCAiYEawAAAQcAQwDeAAAAIUATAl8uby4CIC4wLgIuJQBIKwIBLbkCIgApACsBK11xNQD//wBj/+cGrAdFAiYEagAAAQcEdAQ4ABkAGkATAlBBAX9BkEGwQcBBBABBQCUlQQErXXE1//8ARP/oBQAGDQImBGsAAAEHBIUDKgAAABhAEQIAQQGQQcBB0EEDAEFAJSVBAStdcTX//wBj/+cGrAb7AiYEagAAAQcA1wHLAVEAFkAKAgAtOSUlQQIBLbkCIQApACsBKzX//wBE/+gFAAWqAiYEawAAAQcA1wDgAAAAFkAKAgAtOSUlQQIBLbkCIgApACsBKzX//wBj/rsGrAXUAiYEagAAAQcEfQOsAAAAEEAKAgAuAQAuLx0dQQErcTX//wBE/rsFAARAAiYEawAAAQcEfQLGAAAAC7YCAC4vHR1BASs1AP//AKH+uwUiBboCJgA4AAABBwR9A3AAAAAQQAoBTxYBABYXEQZBAStxNf//AIP+uwPgBCYCJgBYAAABBwR9AqgAAAAUQA4BUBpgGnAaAwAaGwwVQQErXTX//wCh/+cFIgcsAiYAOAAAAQcEdAPoAAAAEEAKAdAfAQAfJQwAQQErXTX//wCD/+gD4AYNAiYAWAAAAQcEhQMbAAAAMkAcAVAtkC2gLbAtBAAtEC1QLWAtcC2QLaAtsC0ILbj/wEAJFxo0AC0sCxZBASsrXXE1//8Aof/nBoIHLAImBGwAAAEHAI0BiAFqACmxASe4/8BAFDk1cCcBLydfJ48nAycaF0grAQEmuQIhACkAKwErXXIrNQD//wCD/+gFHQXCAiYEbQAAAQcAjQDnAAAAG0AOAU8okCgCKBk8SCsBASW5AiIAKQArAStxNQD//wCh/+cGggcsAiYEbAAAAQcAQwGFAWoAIUASAX8pAW8pAZ8pASkaAEgrAQEnuQIhACkAKwErXXFyNQD//wCD/+gFHQXCAiYEbQAAAQcAQwDeAAAAGUAMAeAmASYZDEgrAQEmuQIiACkAKwErcTUA//8Aof/nBoIHLAImBGwAAAEHBHQD6AAAABRADgEvMIAw0DADADA2FB9BAStdNf//AIP/6AUdBg0CJgRtAAABBwSFAxsAAAAaQA0BUDmgOQKQOaA5AjkZuP/nsUgrAStdcTX//wCh/+cGggb7AiYEbAAAAQcA1wGZAVEAFkAKAQAmMhQfQQEBJrkCIQApACsBKzX//wCD/+gFHQWqAiYEbQAAAQcA1wDmAAAAIEASAe8lASVAU1Q0ACUxEx9BAQEluQIiACkAKwErK3E1//8Aof67BoIFugImBGwAAAEHBH0DcAAAABBACgFPJwEAJygaDkEBK3E1//8Ag/67BR0EJgImBG0AAAEHBH0CqAAAABRADgFQJmAmcCYDACYnFR1BAStdNf//AAb+uwVGBboCJgA8AAABBwR9AzQAAAALtgEADg8ADEEBKzUA//8AIf5RA+4EJgImAFwAAAEHBH0DrAAAAAu2AQAcHBISQQErNQD//wAGAAAFRgcsAiYAPAAAAQcEdAO2AAAAEkAMAdAX4BcCABcdAwlBAStdNf//ACH+UQPuBg0CJgBcAAABBwSFAvgAAAAjQAwBHy9wLwKQL6AvAi+4/8C0KzA0Lw+4/8mxSCsBKytdcTUA//8ABgAABUYG+wImADwAAAEHANcBaAFRABZACgEADRkDCUEBAQ25AiEAKQArASs1//8AIf5RA+4FqgImAFwAAAEHANcAvgAAABZACgEAGycMEkEBARu5AiIAKQArASs1/////QAABVkHIQI2ACQAAAEXAN8BNgFfABZACgIAFBEBAkECARO5AiEAKQArASs1//8ASv/oBBwFwgI2AEQAAAEXAN8A9QAAAB5AEAJgPQHgPQEAPTocHEECATy5AsMAKQArAStdcTX////iAAACWwchAjYALAAAARcA3/+6AV8AGkANASAJAQAJBgECQQEBCLkCIQApACsBK101////sAAAAikFwgI2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AJUAlgEEAJgAmQCaAQUAnACdAJ4BBgCgAKEAogCjAKQApQCmAKcAqACpAKoAqwCtAK4ArwCwALEAsgCzALQAtQC2ALcAuAC5ALoAuwC8AQcAvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAM8A0ADRANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AQABCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUAnwIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJACXAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgCbApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwC9A2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIAAAAAAAAEcwR0BHUEdgR3BHgEeQR6BHsEfAAAAAAEfQR+BH8EgASBAAAAAASCBIMEhASFBIYEhwSIBIkEigSLBIwEjQSOBI8EkASRBJIEkwSUBJUElgSXBJgEmQSaBJsEnASdBJ4EnwSgBKEEogSjBKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE/AT9BP4E/wUABQEFAgUDBQQFBQUGBQcFCAUJAAAAAAAAAAAFCgULBQwFDQUOBQ8FEAURBRIFEwUUBRUFFgUXBRgFGQUaBRsFHAUdBR4FHwUgBSEFLm51bGwQbm9ubWFya2luZ3JldHVybgNtdTEDcGkxA09obQRFdXJvB2RtYWNyb24Jb3ZlcnNjb3JlBm1pZGRvdAZBYnJldmUGYWJyZXZlB0FvZ29uZWsHYW9nb25lawZEY2Fyb24GZGNhcm9uBkRzbGFzaAdFb2dvbmVrB2VvZ29uZWsGRWNhcm9uBmVjYXJvbgZMYWN1dGUGbGFjdXRlBkxjYXJvbgZsY2Fyb24ETGRvdARsZG90Bk5hY3V0ZQZuYWN1dGUGTmNhcm9uBm5jYXJvbglPZGJsYWN1dGUJb2RibGFjdXRlBlJhY3V0ZQZyYWN1dGUGUmNhcm9uBnJjYXJvbgZTYWN1dGUGc2FjdXRlCFRjZWRpbGxhCHRjZWRpbGxhBlRjYXJvbgZ0Y2Fyb24FVXJpbmcFdXJpbmcJVWRibGFjdXRlCXVkYmxhY3V0ZQZaYWN1dGUGemFjdXRlBFpkb3QEemRvdAVHYW1tYQVUaGV0YQNQaGkFYWxwaGEFZGVsdGEHZXBzaWxvbgVzaWdtYQN0YXUDcGhpDXVuZGVyc2NvcmVkYmwJZXhjbGFtZGJsCW5zdXBlcmlvcgZwZXNldGEJYXJyb3dsZWZ0B2Fycm93dXAKYXJyb3dyaWdodAlhcnJvd2Rvd24JYXJyb3dib3RoCWFycm93dXBkbgxhcnJvd3VwZG5ic2UKb3J0aG9nb25hbAxpbnRlcnNlY3Rpb24LZXF1aXZhbGVuY2UFaG91c2UNcmV2bG9naWNhbG5vdAppbnRlZ3JhbHRwCmludGVncmFsYnQIU0YxMDAwMDAIU0YxMTAwMDAIU0YwMTAwMDAIU0YwMzAwMDAIU0YwMjAwMDAIU0YwNDAwMDAIU0YwODAwMDAIU0YwOTAwMDAIU0YwNjAwMDAIU0YwNzAwMDAIU0YwNTAwMDAIU0Y0MzAwMDAIU0YyNDAwMDAIU0Y1MTAwMDAIU0Y1MjAwMDAIU0YzOTAwMDAIU0YyMjAwMDAIU0YyMTAwMDAIU0YyNTAwMDAIU0Y1MDAwMDAIU0Y0OTAwMDAIU0YzODAwMDAIU0YyODAwMDAIU0YyNzAwMDAIU0YyNjAwMDAIU0YzNjAwMDAIU0YzNzAwMDAIU0Y0MjAwMDAIU0YxOTAwMDAIU0YyMDAwMDAIU0YyMzAwMDAIU0Y0NzAwMDAIU0Y0ODAwMDAIU0Y0MTAwMDAIU0Y0NTAwMDAIU0Y0NjAwMDAIU0Y0MDAwMDAIU0Y1NDAwMDAIU0Y1MzAwMDAIU0Y0NDAwMDAHdXBibG9jawdkbmJsb2NrBWJsb2NrB2xmYmxvY2sHcnRibG9jawdsdHNoYWRlBXNoYWRlB2Rrc2hhZGUJZmlsbGVkYm94CmZpbGxlZHJlY3QHdHJpYWd1cAd0cmlhZ3J0B3RyaWFnZG4HdHJpYWdsZgZjaXJjbGUJaW52YnVsbGV0CWludmNpcmNsZQlzbWlsZWZhY2UMaW52c21pbGVmYWNlA3N1bgZmZW1hbGUEbWFsZQVzcGFkZQRjbHViBWhlYXJ0B2RpYW1vbmQLbXVzaWNhbG5vdGUObXVzaWNhbG5vdGVkYmwCSUoCaWoLbmFwb3N0cm9waGUGbWludXRlBnNlY29uZAlhZmlpNjEyNDgJYWZpaTYxMjg5BkgyMjA3MwZIMTg1NDMGSDE4NTUxBkgxODUzMwpvcGVuYnVsbGV0B0FtYWNyb24HYW1hY3JvbgtDY2lyY3VtZmxleAtjY2lyY3VtZmxleARDZG90BGNkb3QHRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUERWRvdARlZG90C0djaXJjdW1mbGV4C2djaXJjdW1mbGV4BEdkb3QEZ2RvdAhHY2VkaWxsYQhnY2VkaWxsYQtIY2lyY3VtZmxleAtoY2lyY3VtZmxleARIYmFyBGhiYXIGSXRpbGRlBml0aWxkZQdJbWFjcm9uB2ltYWNyb24GSWJyZXZlBmlicmV2ZQdJb2dvbmVrB2lvZ29uZWsLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgIS2NlZGlsbGEIa2NlZGlsbGEMa2dyZWVubGFuZGljCExjZWRpbGxhCGxjZWRpbGxhCE5jZWRpbGxhCG5jZWRpbGxhA0VuZwNlbmcHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUIUmNlZGlsbGEIcmNlZGlsbGELU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgEVGJhcgR0YmFyBlV0aWxkZQZ1dGlsZGUHVW1hY3Jvbgd1bWFjcm9uBlVicmV2ZQZ1YnJldmUHVW9nb25lawd1b2dvbmVrC1djaXJjdW1mbGV4C3djaXJjdW1mbGV4C1ljaXJjdW1mbGV4C3ljaXJjdW1mbGV4BWxvbmdzCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBRWFjdXRlB2FlYWN1dGULT3NsYXNoYWN1dGULb3NsYXNoYWN1dGUJYW5vdGVsZWlhBldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUNcXVvdGVyZXZlcnNlZAlyYWRpY2FsZXgJYWZpaTA4OTQxCWVzdGltYXRlZAlvbmVlaWdodGgMdGhyZWVlaWdodGhzC2ZpdmVlaWdodGhzDHNldmVuZWlnaHRocwtjb21tYWFjY2VudBB1bmRlcmNvbW1hYWNjZW50BXRvbm9zDWRpZXJlc2lzdG9ub3MKQWxwaGF0b25vcwxFcHNpbG9udG9ub3MIRXRhdG9ub3MJSW90YXRvbm9zDE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcxFpb3RhZGllcmVzaXN0b25vcwVBbHBoYQRCZXRhBURlbHRhB0Vwc2lsb24EWmV0YQNFdGEESW90YQVLYXBwYQZMYW1iZGECTXUCTnUCWGkHT21pY3JvbgJQaQNSaG8FU2lnbWEDVGF1B1Vwc2lsb24DQ2hpA1BzaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwRiZXRhBWdhbW1hBHpldGEDZXRhBXRoZXRhBGlvdGEFa2FwcGEGbGFtYmRhAm51AnhpB29taWNyb24DcmhvBnNpZ21hMQd1cHNpbG9uA2NoaQNwc2kFb21lZ2EMaW90YWRpZXJlc2lzD3Vwc2lsb25kaWVyZXNpcwxvbWljcm9udG9ub3MMdXBzaWxvbnRvbm9zCm9tZWdhdG9ub3MJYWZpaTEwMDIzCWFmaWkxMDA1MQlhZmlpMTAwNTIJYWZpaTEwMDUzCWFmaWkxMDA1NAlhZmlpMTAwNTUJYWZpaTEwMDU2CWFmaWkxMDA1NwlhZmlpMTAwNTgJYWZpaTEwMDU5CWFmaWkxMDA2MAlhZmlpMTAwNjEJYWZpaTEwMDYyCWFmaWkxMDE0NQlhZmlpMTAwMTcJYWZpaTEwMDE4CWFmaWkxMDAxOQlhZmlpMTAwMjAJYWZpaTEwMDIxCWFmaWkxMDAyMglhZmlpMTAwMjQJYWZpaTEwMDI1CWFmaWkxMDAyNglhZmlpMTAwMjcJYWZpaTEwMDI4CWFmaWkxMDAyOQlhZmlpMTAwMzAJYWZpaTEwMDMxCWFmaWkxMDAzMglhZmlpMTAwMzMJYWZpaTEwMDM0CWFmaWkxMDAzNQlhZmlpMTAwMzYJYWZpaTEwMDM3CWFmaWkxMDAzOAlhZmlpMTAwMzkJYWZpaTEwMDQwCWFmaWkxMDA0MQlhZmlpMTAwNDIJYWZpaTEwMDQzCWFmaWkxMDA0NAlhZmlpMTAwNDUJYWZpaTEwMDQ2CWFmaWkxMDA0NwlhZmlpMTAwNDgJYWZpaTEwMDQ5CWFmaWkxMDA2NQlhZmlpMTAwNjYJYWZpaTEwMDY3CWFmaWkxMDA2OAlhZmlpMTAwNjkJYWZpaTEwMDcwCWFmaWkxMDA3MglhZmlpMTAwNzMJYWZpaTEwMDc0CWFmaWkxMDA3NQlhZmlpMTAwNzYJYWZpaTEwMDc3CWFmaWkxMDA3OAlhZmlpMTAwNzkJYWZpaTEwMDgwCWFmaWkxMDA4MQlhZmlpMTAwODIJYWZpaTEwMDgzCWFmaWkxMDA4NAlhZmlpMTAwODUJYWZpaTEwMDg2CWFmaWkxMDA4NwlhZmlpMTAwODgJYWZpaTEwMDg5CWFmaWkxMDA5MAlhZmlpMTAwOTEJYWZpaTEwMDkyCWFmaWkxMDA5MwlhZmlpMTAwOTQJYWZpaTEwMDk1CWFmaWkxMDA5NglhZmlpMTAwOTcJYWZpaTEwMDcxCWFmaWkxMDA5OQlhZmlpMTAxMDAJYWZpaTEwMTAxCWFmaWkxMDEwMglhZmlpMTAxMDMJYWZpaTEwMTA0CWFmaWkxMDEwNQlhZmlpMTAxMDYJYWZpaTEwMTA3CWFmaWkxMDEwOAlhZmlpMTAxMDkJYWZpaTEwMTEwCWFmaWkxMDE5MwlhZmlpMTAwNTAJYWZpaTEwMDk4CWFmaWkwMDIwOAlhZmlpNjEzNTIFc2hldmEKaGF0YWZzZWdvbApoYXRhZnBhdGFoC2hhdGFmcWFtYXRzBWhpcmlxBXRzZXJlBXNlZ29sBXBhdGFoBnFhbWF0cwVob2xhbQZxdWJ1dHMGZGFnZXNoBW1ldGVnBW1hcWFmBHJhZmUFcGFzZXEHc2hpbmRvdAZzaW5kb3QIc29mcGFzdXEEYWxlZgNiZXQFZ2ltZWwFZGFsZXQCaGUDdmF2BXpheWluA2hldAN0ZXQDeW9kCGZpbmFsa2FmA2thZgVsYW1lZAhmaW5hbG1lbQNtZW0IZmluYWxudW4DbnVuBnNhbWVraARheWluB2ZpbmFscGUCcGUKZmluYWx0c2FkaQV0c2FkaQNxb2YEcmVzaARzaGluA3Rhdglkb3VibGV2YXYGdmF2eW9kCWRvdWJsZXlvZAZnZXJlc2gJZ2Vyc2hheWltDW5ld3NoZXFlbHNpZ24KdmF2c2hpbmRvdA1maW5hbGthZnNoZXZhDmZpbmFsa2FmcWFtYXRzCmxhbWVkaG9sYW0QbGFtZWRob2xhbWRhZ2VzaAdhbHRheWluC3NoaW5zaGluZG90CnNoaW5zaW5kb3QRc2hpbmRhZ2VzaHNoaW5kb3QQc2hpbmRhZ2VzaHNpbmRvdAlhbGVmcGF0YWgKYWxlZnFhbWF0cwlhbGVmbWFwaXEJYmV0ZGFnZXNoC2dpbWVsZGFnZXNoC2RhbGV0ZGFnZXNoCGhlZGFnZXNoCXZhdmRhZ2VzaAt6YXlpbmRhZ2VzaAl0ZXRkYWdlc2gJeW9kZGFnZXNoDmZpbmFsa2FmZGFnZXNoCWthZmRhZ2VzaAtsYW1lZGRhZ2VzaAltZW1kYWdlc2gJbnVuZGFnZXNoDHNhbWVraGRhZ2VzaA1maW5hbHBlZGFnZXNoCHBlZGFnZXNoC3RzYWRpZGFnZXNoCXFvZmRhZ2VzaApyZXNoZGFnZXNoCnNoaW5kYWdlc2gIdGF2ZGFnZXMIdmF2aG9sYW0HYmV0cmFmZQdrYWZyYWZlBnBlcmFmZQlhbGVmbGFtZWQSemVyb3dpZHRobm9uam9pbmVyD3plcm93aWR0aGpvaW5lcg9sZWZ0dG9yaWdodG1hcmsPcmlnaHR0b2xlZnRtYXJrCWFmaWk1NzM4OAlhZmlpNTc0MDMJYWZpaTU3NDA3CWFmaWk1NzQwOQlhZmlpNTc0NDAJYWZpaTU3NDUxCWFmaWk1NzQ1MglhZmlpNTc0NTMJYWZpaTU3NDU0CWFmaWk1NzQ1NQlhZmlpNTc0NTYJYWZpaTU3NDU3CWFmaWk1NzQ1OAlhZmlpNTczOTIJYWZpaTU3MzkzCWFmaWk1NzM5NAlhZmlpNTczOTUJYWZpaTU3Mzk2CWFmaWk1NzM5NwlhZmlpNTczOTgJYWZpaTU3Mzk5CWFmaWk1NzQwMAlhZmlpNTc0MDEJYWZpaTU3MzgxCWFmaWk1NzQ2MQlhZmlpNjMxNjcJYWZpaTU3NDU5CWFmaWk1NzU0MwlhZmlpNTc1MzQJYWZpaTU3NDk0CWFmaWk2Mjg0MwlhZmlpNjI4NDQJYWZpaTYyODQ1CWFmaWk2NDI0MAlhZmlpNjQyNDEJYWZpaTYzOTU0CWFmaWk1NzM4MglhZmlpNjQyNDIJYWZpaTYyODgxCWFmaWk1NzUwNAlhZmlpNTczNjkJYWZpaTU3MzcwCWFmaWk1NzM3MQlhZmlpNTczNzIJYWZpaTU3MzczCWFmaWk1NzM3NAlhZmlpNTczNzUJYWZpaTU3MzkxCWFmaWk1NzQ3MQlhZmlpNTc0NjAJYWZpaTUyMjU4CWFmaWk1NzUwNglhZmlpNjI5NTgJYWZpaTYyOTU2CWFmaWk1Mjk1NwlhZmlpNTc1MDUJYWZpaTYyODg5CWFmaWk2Mjg4NwlhZmlpNjI4ODgJYWZpaTU3NTA3CWFmaWk2Mjk2MQlhZmlpNjI5NTkJYWZpaTYyOTYwCWFmaWk1NzUwOAlhZmlpNjI5NjIJYWZpaTU3NTY3CWFmaWk2Mjk2NAlhZmlpNTIzMDUJYWZpaTUyMzA2CWFmaWk1NzUwOQlhZmlpNjI5NjcJYWZpaTYyOTY1CWFmaWk2Mjk2NglhZmlpNTc1NTUJYWZpaTUyMzY0CWFmaWk2Mzc1MwlhZmlpNjM3NTQJYWZpaTYzNzU5CWFmaWk2Mzc2MwlhZmlpNjM3OTUJYWZpaTYyODkxCWFmaWk2MzgwOAlhZmlpNjI5MzgJYWZpaTYzODEwCWFmaWk2Mjk0MglhZmlpNjI5NDcJYWZpaTYzODEzCWFmaWk2MzgyMwlhZmlpNjM4MjQJYWZpaTYzODMzCWFmaWk2Mzg0NAlhZmlpNjI4ODIJYWZpaTYyODgzCWFmaWk2Mjg4NAlhZmlpNjI4ODUJYWZpaTYyODg2CWFmaWk2Mzg0NglhZmlpNjM4NDkHdW5pMjAyQQd1bmkyMDJCB3VuaTIwMkQHdW5pMjAyRQd1bmkyMDJDB3VuaTIwNkUIdW5pMjA2RjsHdW5pMjA2QQd1bmkyMDZCCHVuaTIwNkM7B3VuaTIwNkQHdW5pRjAwQQd1bmlGMDBCB3VuaUYwMEMHdW5pRjAwRAd1bmlGMDBFB3VuaUZGRkMJYWZpaTYzOTA0CWFmaWk2MzkwNQlhZmlpNjM5MDYJYWZpaTYzOTA4CWFmaWk2MzkxMAlhZmlpNjM5MTIJYWZpaTYyOTI3CWFmaWk2Mzk0MQlhZmlpNjI5MzkJYWZpaTYzOTQzCWFmaWk2Mjk0MwlhZmlpNjI5NDYJYWZpaTYzOTQ2CWFmaWk2Mjk1MQlhZmlpNjM5NDgJYWZpaTYyOTUzCWFmaWk2Mzk1MAlhZmlpNjM5NTEJYWZpaTYzOTUyCWFmaWk2Mzk1MwlhZmlpNjM5NTYJYWZpaTYzOTU4CWFmaWk2Mzk1OQlhZmlpNjM5NjAJYWZpaTYzOTYxCWFmaWk2NDA0NglhZmlpNjQwNTgJYWZpaTY0MDU5CWFmaWk2NDA2MAlhZmlpNjQwNjEJYWZpaTYyOTQ1CWFmaWk2NDE4NAlhZmlpNTIzOTkJYWZpaTUyNDAwCWFmaWk2Mjc1MwlhZmlpNTc0MTEJYWZpaTYyNzU0CWFmaWk1NzQxMglhZmlpNjI3NTUJYWZpaTU3NDEzCWFmaWk2Mjc1NglhZmlpNTc0MTQJYWZpaTYyNzU5CWFmaWk2Mjc1NwlhZmlpNjI3NTgJYWZpaTU3NDE1CWFmaWk2Mjc2MAlhZmlpNTc0MTYJYWZpaTYyNzYzCWFmaWk2Mjc2MQlhZmlpNjI3NjIJYWZpaTU3NDE3CWFmaWk2Mjc2NAlhZmlpNTc0MTgJYWZpaTYyNzY3CWFmaWk2Mjc2NQlhZmlpNjI3NjYJYWZpaTU3NDE5CWFmaWk2Mjc3MAlhZmlpNjI3NjgJYWZpaTYyNzY5CWFmaWk1NzQyMAlhZmlpNjI3NzMJYWZpaTYyNzcxCWFmaWk2Mjc3MglhZmlpNTc0MjEJYWZpaTYyNzc2CWFmaWk2Mjc3NAlhZmlpNjI3NzUJYWZpaTU3NDIyCWFmaWk2Mjc3OQlhZmlpNjI3NzcJYWZpaTYyNzc4CWFmaWk1NzQyMwlhZmlpNjI3ODAJYWZpaTU3NDI0CWFmaWk2Mjc4MQlhZmlpNTc0MjUJYWZpaTYyNzgyCWFmaWk1NzQyNglhZmlpNjI3ODMJYWZpaTU3NDI3CWFmaWk2Mjc4NglhZmlpNjI3ODQJYWZpaTYyNzg1CWFmaWk1NzQyOAlhZmlpNjI3ODkJYWZpaTYyNzg3CWFmaWk2Mjc4OAlhZmlpNTc0MjkJYWZpaTYyNzkyCWFmaWk2Mjc5MAlhZmlpNjI3OTEJYWZpaTU3NDMwCWFmaWk2Mjc5NQlhZmlpNjI3OTMJYWZpaTYyNzk0CWFmaWk1NzQzMQlhZmlpNjI3OTgJYWZpaTYyNzk2CWFmaWk2Mjc5NwlhZmlpNTc0MzIJYWZpaTYyODAxCWFmaWk2Mjc5OQlhZmlpNjI4MDAJYWZpaTU3NDMzCWFmaWk2MjgwNAlhZmlpNjI4MDIJYWZpaTYyODAzCWFmaWk1NzQzNAlhZmlpNjI4MDcJYWZpaTYyODA1CWFmaWk2MjgwNglhZmlpNTc0NDEJYWZpaTYyODEwCWFmaWk2MjgwOAlhZmlpNjI4MDkJYWZpaTU3NDQyCWFmaWk2MjgxMwlhZmlpNjI4MTEJYWZpaTYyODEyCWFmaWk1NzQ0MwlhZmlpNjI4MTYJYWZpaTU3NDEwCWFmaWk2MjgxNQlhZmlpNTc0NDQJYWZpaTYyODE5CWFmaWk2MjgxNwlhZmlpNjI4MTgJYWZpaTU3NDQ1CWFmaWk2MjgyMglhZmlpNjI4MjAJYWZpaTYyODIxCWFmaWk1NzQ0NglhZmlpNjI4MjUJYWZpaTYyODIzCWFmaWk2MjgyNAlhZmlpNTc0NDcJYWZpaTYyODI4CWFmaWk1NzQ3MAlhZmlpNjI4MjcJYWZpaTU3NDQ4CWFmaWk2MjgyOQlhZmlpNTc0NDkJYWZpaTYyODMwCWFmaWk1NzQ1MAlhZmlpNjI4MzMJYWZpaTYyODMxCWFmaWk2MjgzMglhZmlpNjI4MzQJYWZpaTYyODM1CWFmaWk2MjgzNglhZmlpNjI4MzcJYWZpaTYyODM4CWFmaWk2MjgzOQlhZmlpNjI4NDAJYWZpaTYyODQxCWdseXBoMTAyMQthZmlpNTc1NDMtMgthZmlpNTc0NTQtMgthZmlpNTc0NTEtMglnbHlwaDEwMjUJZ2x5cGgxMDI2C2FmaWk1NzQ3MS0yC2FmaWk1NzQ1OC0yC2FmaWk1NzQ1Ny0yC2FmaWk1NzQ5NC0yC2FmaWk1NzQ1OS0yC2FmaWk1NzQ1NS0yC2FmaWk1NzQ1Mi0yCWdseXBoMTAzNAlnbHlwaDEwMzUJZ2x5cGgxMDM2C2FmaWk2Mjg4NC0yC2FmaWk2Mjg4MS0yC2FmaWk2Mjg4Ni0yC2FmaWk2Mjg4My0yC2FmaWk2Mjg4NS0yC2FmaWk2Mjg4Mi0yC2FmaWk1NzUwNC0yC2FmaWk1NzQ1Ni0yC2FmaWk1NzQ1My0yCWdseXBoMTA0NglnbHlwaDEwNDcLYWZpaTU3NTQzLTMLYWZpaTU3NDU0LTMLYWZpaTU3NDUxLTMJZ2x5cGgxMDUxCWdseXBoMTA1MgthZmlpNTc0NzEtMwthZmlpNTc0NTgtMwthZmlpNTc0NTctMwthZmlpNTc0OTQtMwthZmlpNTc0NTktMwthZmlpNTc0NTUtMwthZmlpNTc0NTItMwlnbHlwaDEwNjAJZ2x5cGgxMDYxCWdseXBoMTA2MgthZmlpNjI4ODQtMwthZmlpNjI4ODEtMwthZmlpNjI4ODYtMwthZmlpNjI4ODMtMwthZmlpNjI4ODUtMwthZmlpNjI4ODItMwthZmlpNTc1MDQtMwthZmlpNTc0NTYtMwthZmlpNTc0NTMtMwlnbHlwaDEwNzIJZ2x5cGgxMDczC2FmaWk1NzU0My00C2FmaWk1NzQ1NC00C2FmaWk1NzQ1MS00CWdseXBoMTA3NwlnbHlwaDEwNzgLYWZpaTU3NDcxLTQLYWZpaTU3NDU4LTQLYWZpaTU3NDU3LTQLYWZpaTU3NDk0LTQLYWZpaTU3NDU5LTQLYWZpaTU3NDU1LTQLYWZpaTU3NDUyLTQJZ2x5cGgxMDg2CWdseXBoMTA4NwlnbHlwaDEwODgLYWZpaTYyODg0LTQLYWZpaTYyODgxLTQLYWZpaTYyODg2LTQLYWZpaTYyODgzLTQLYWZpaTYyODg1LTQLYWZpaTYyODgyLTQLYWZpaTU3NTA0LTQLYWZpaTU3NDU2LTQLYWZpaTU3NDUzLTQJZ2x5cGgxMDk4CWdseXBoMTA5OQlnbHlwaDExMDAJZ2x5cGgxMTAxCWdseXBoMTEwMglnbHlwaDExMDMJZ2x5cGgxMTA0CWdseXBoMTEwNQlnbHlwaDExMDYJZ2x5cGgxMTA3CWdseXBoMTEwOAlnbHlwaDExMDkJZ2x5cGgxMTEwCWdseXBoMTExMQlnbHlwaDExMTIJZ2x5cGgxMTEzCWdseXBoMTExNAlnbHlwaDExMTUJZ2x5cGgxMTE2CWdseXBoMTExNwlnbHlwaDExMTgJZ2x5cGgxMTE5CWdseXBoMTEyMAlnbHlwaDExMjEJZ2x5cGgxMTIyCWdseXBoMTEyMwlnbHlwaDExMjQJZ2x5cGgxMTI1CWdseXBoMTEyNgthZmlpNTc0NDAtMgthZmlpNTc0NDAtMwthZmlpNTc0NDAtNAVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgRmMDA2BGYwMDcEZjAwORJjb21iaW5pbmdob29rYWJvdmUEZjAxMARmMDEzBGYwMTEEZjAxYwRmMDE1FGNvbWJpbmluZ3RpbGRlYWNjZW50BGYwMmMIZG9uZ3NpZ24Ib25ldGhpcmQJdHdvdGhpcmRzBGYwMDgEZjAwZgRmMDEyBGYwMTQEZjAxNgRmMDE3BGYwMTgEZjAxOQRmMDFhBGYwMWIEZjAxZQRmMDFmBGYwMjAEZjAyMQRmMDIyFGNvbWJpbmluZ2dyYXZlYWNjZW50FGNvbWJpbmluZ2FjdXRlYWNjZW50BGYwMWQRY29tYmluaW5nZG90YmVsb3cEZjAyMwRmMDI5BGYwMmEEZjAyYgRmMDI0BGYwMjUEZjAyNgRmMDI3BGYwMjgEZjAyZARmMDJlBGYwMmYEZjAzMARmMDMxCUFkb3RiZWxvdwlhZG90YmVsb3cKQWhvb2thYm92ZQphaG9va2Fib3ZlEEFjaXJjdW1mbGV4YWN1dGUQYWNpcmN1bWZsZXhhY3V0ZRBBY2lyY3VtZmxleGdyYXZlEGFjaXJjdW1mbGV4Z3JhdmUUQWNpcmN1bWZsZXhob29rYWJvdmUUYWNpcmN1bWZsZXhob29rYWJvdmUQQWNpcmN1bWZsZXh0aWxkZRBhY2lyY3VtZmxleHRpbGRlE0FjaXJjdW1mbGV4ZG90YmVsb3cTYWNpcmN1bWZsZXhkb3RiZWxvdwtBYnJldmVhY3V0ZQthYnJldmVhY3V0ZQtBYnJldmVncmF2ZQthYnJldmVncmF2ZQ9BYnJldmVob29rYWJvdmUPYWJyZXZlaG9va2Fib3ZlC0FicmV2ZXRpbGRlC2FicmV2ZXRpbGRlDkFicmV2ZWRvdGJlbG93DmFicmV2ZWRvdGJlbG93CUVkb3RiZWxvdwllZG90YmVsb3cKRWhvb2thYm92ZQplaG9va2Fib3ZlBkV0aWxkZQZldGlsZGUQRWNpcmN1bWZsZXhhY3V0ZRBlY2lyY3VtZmxleGFjdXRlEEVjaXJjdW1mbGV4Z3JhdmUQZWNpcmN1bWZsZXhncmF2ZRRFY2lyY3VtZmxleGhvb2thYm92ZRRlY2lyY3VtZmxleGhvb2thYm92ZRBFY2lyY3VtZmxleHRpbGRlEGVjaXJjdW1mbGV4dGlsZGUTRWNpcmN1bWZsZXhkb3RiZWxvdxNlY2lyY3VtZmxleGRvdGJlbG93Cklob29rYWJvdmUKaWhvb2thYm92ZQlJZG90YmVsb3cJaWRvdGJlbG93CU9kb3RiZWxvdwlvZG90YmVsb3cKT2hvb2thYm92ZQpvaG9va2Fib3ZlEE9jaXJjdW1mbGV4YWN1dGUQb2NpcmN1bWZsZXhhY3V0ZRBPY2lyY3VtZmxleGdyYXZlEG9jaXJjdW1mbGV4Z3JhdmUUT2NpcmN1bWZsZXhob29rYWJvdmUUb2NpcmN1bWZsZXhob29rYWJvdmUQT2NpcmN1bWZsZXh0aWxkZRBvY2lyY3VtZmxleHRpbGRlE09jaXJjdW1mbGV4ZG90YmVsb3cTb2NpcmN1bWZsZXhkb3RiZWxvdwpPaG9ybmFjdXRlCm9ob3JuYWN1dGUKT2hvcm5ncmF2ZQpvaG9ybmdyYXZlDk9ob3JuaG9va2Fib3ZlDm9ob3JuaG9va2Fib3ZlCk9ob3JudGlsZGUKb2hvcm50aWxkZQ1PaG9ybmRvdGJlbG93DW9ob3JuZG90YmVsb3cJVWRvdGJlbG93CXVkb3RiZWxvdwpVaG9va2Fib3ZlCnVob29rYWJvdmUKVWhvcm5hY3V0ZQp1aG9ybmFjdXRlClVob3JuZ3JhdmUKdWhvcm5ncmF2ZQ5VaG9ybmhvb2thYm92ZQ51aG9ybmhvb2thYm92ZQpVaG9ybnRpbGRlCnVob3JudGlsZGUNVWhvcm5kb3RiZWxvdw11aG9ybmRvdGJlbG93CVlkb3RiZWxvdwl5ZG90YmVsb3cKWWhvb2thYm92ZQp5aG9va2Fib3ZlBll0aWxkZQZ5dGlsZGUHdW5pMDFDRAd1bmkwMUNFB3VuaTAxQ0YHdW5pMDFEMAd1bmkwMUQxB3VuaTAxRDIHdW5pMDFEMwd1bmkwMUQ0B3VuaTAxRDUHdW5pMDFENgd1bmkwMUQ3B3VuaTAxRDgHdW5pMDFEOQd1bmkwMURBB3VuaTAxREIHdW5pMDFEQwd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5Ngd1bmkwNDk3B3VuaTA0OWEHdW5pMDQ5Ygd1bmkwNDljB3VuaTA0OWQHdW5pMDRhMgd1bmkwNGEzB3VuaTA0YWUHdW5pMDRhZgd1bmkwNGIwB3VuaTA0YjEHdW5pMDRiMgd1bmkwNGIzB3VuaTA0YjgHdW5pMDRiOQd1bmkwNGJhB3VuaTA0YmIHdW5pMDE4Zgd1bmkwMjU5B3VuaTA0ZTgHdW5pMDRlOQAAAAEAABVcAAEDjQwAAAkJTgADACT/jwADADf/2wADADz/2wADAfH/jwADAfn/jwADAfv/jwADAgH/jwADAgn/2wADAgr/2wADAg//2wAUABT/aAAkAAP/jwAkADf/aAAkADn/aAAkADr/tAAkADz/aAAkAFn/2wAkAFr/2wAkAFz/2wAkALb/aAApAA//HQApABH/HQApACT/jwAvAAP/tAAvADf/aAAvADn/aAAvADr/aAAvADz/aAAvAFz/tAAvALb/jwAzAAP/2wAzAA/++AAzABH++AAzACT/aAA1ADf/2wA1ADn/2wA1ADr/2wA1ADz/2wA3AAP/2wA3AA//HQA3ABD/jwA3ABH/HQA3AB3/HQA3AB7/HQA3ACT/aAA3ADL/2wA3AET/HQA3AEb/HQA3AEj/HQA3AEz/tAA3AFL/HQA3AFX/tAA3AFb/HQA3AFj/tAA3AFr/jwA3AFz/jwA5AA//RAA5ABD/jwA5ABH/RAA5AB3/tAA5AB7/tAA5ACT/aAA5AET/aAA5AEj/jwA5AEz/2wA5AFL/jwA5AFX/tAA5AFj/tAA5AFz/tAA6AA//jwA6ABD/2wA6ABH/jwA6AB3/2wA6AB7/2wA6ACT/tAA6AET/tAA6AEj/2wA6AEwAAAA6AFL/2wA6AFX/2wA6AFj/2wA6AFz/7gA8AAP/2wA8AA/++AA8ABD/RAA8ABH++AA8AB3/jwA8AB7/ewA8ACT/aAA8AET/aAA8AEj/RAA8AEz/tAA8AFL/RAA8AFP/aAA8AFT/RAA8AFj/jwA8AFn/jwBJAEn/2wBJALYAJQBVAA//jwBVABH/jwBVALYATABZAA//aABZABH/aABaAA//jwBaABH/jwBcAA//aABcABH/aAC1ALX/2wC2AAP/tAC2AFb/2wC2ALb/2wDEAi3/YADEAjb/YADEAkz/YADEAlH/vADEAlT/vAErAA//HwErABH/HwErAfgApAErAfn/RAErAfv/RAErAgH/RAErAhr/qAErAicAWAEsAfn/2wEsAfv/2wEsAgH/2wEsAgr/vgEsAg//vgEtAfn/xQEtAgr/vgEtAg//vgEvATL/4wEvAhz/2QEvAiT/yQEvAoz/4wEyAS7/4wEyAS//4wEyATH/4wEyATP/4wEyAhD/4wEyAhf/4wEyAiD/4wEyAiL/4wEyAib/4wEyAiv/4wEzATL/4wEzAhz/2QEzAiT/yQEzAoz/4wHxASz/1QHxAS3/xQHxAgX/1QHxAgn/aAHxAgr/aAHxAg//aAHxAhb/2wHxAh7/2wHxAiT/2wH1Agr/vgH2ASz/jQH2AS3/jQH2AS7/RgH2ATH/RgH2ATP/RgH2AfgAqgH2Afn/aAH2Afv/aAH2AgH/aAH2AgX/jQH2Ag3/ngH2AhL/aAH2AhP/tAH2Ahj/aAH2Ahr/tAH2Ahv/aAH2Ah3/aAH2AiD/RgH2AicAYgH2Ain/RgH3Agr/0QH3Ag//0QH5AAP/jwH5ALb/aAH5ASz/1QH5AS3/xQH5AgX/1QH5Agn/aAH5Agr/aAH5Ag//aAH5Ahb/2wH5Ah7/2wH5AiT/2wH7AAP/jwH7ASz/1QH7AgX/1QH7Agn/iQH7Agr/aAH7Ag//aAIAASz/wQIAAS3/jwIAAS7/5wIAAS//5wIAATH/5wIAATP/5wIAAgX/wQIAAhD/5wIAAhf/5wIAAhn/5wIAAh//5wIAAiD/5wIAAib/5wIAAin/5wIAAiv/5wIBAAP/jwIBASz/1QIBAgX/1QIBAgn/aAIBAgr/aAIBAg//aAIFAfn/2wIFAfv/1QIFAgH/2wIFAgr/vgIFAg//vgIHAAP/2wIHAA/++gIHABH++gIHAfn/aAIHAfv/aAIHAgH/aAIIATL/ngIIAoz/ngIJAAP/2wIJAA//HwIJABH/HwIJAB3/HwIJAB7/HwIJASz/2wIJAS3/2wIJAS7/HwIJATD/HwIJATH/HwIJATP/HwIJAfgAvAIJAfn/aAIJAfv/aAIJAgH/aAIJAgX/2wIJAg3/2wIJAhD/HwIJAhH/HwIJAhT/TgIJAhb/TgIJAhj/agIJAhr/tAIJAh3/agIJAh7/jwIJAiD/HwIJAiP/UAIJAiT/jwIJAiX/agIJAicAvAIJAij/TgIJAin/HwIJAir/TgIKAAP/2wIKAA/++gIKABD/RgIKABH++gIKAB3/jwIKAB7/jwIKASz/jQIKAS3/jQIKAS7/RgIKATH/RgIKATP/RgIKAfgAvAIKAfn/aAIKAfv/aAIKAgH/aAIKAgX/jQIKAg3/ngIKAhL/aAIKAhP/tAIKAhb/ngIKAhj/aAIKAhr/tAIKAhv/aAIKAh3/aAIKAiD/RgIKAicAeQIKAin/RgIMAS7/sgIMAS//sgIMATH/sgIMATP/sgIMAhD/sgIMAhn/2QIMAiD/sgIMAib/sgIMAin/sgIMAiv/sgINAgr/0QINAg//0QIPAAP/2wIPASz/jQIPAS3/jQIPAS7/RgIPATH/RgIPATP/RgIPAfgAqgIPAfn/aAIPAfv/aAIPAgH/aAIPAgX/jQIPAg3/ngIPAhL/aAIPAhP/tAIPAhj/aAIPAhr/tAIPAhv/aAIPAh3/aAIPAiD/RgIPAicAYgIPAin/RgIXAS7/dwIXAS//tAIXATH/dwIXATL/qgIXATP/dwIXAhD/dwIXAhL/2wIXAhb/qgIXAhj/2wIXAhn/ngIXAhr/2wIXAhv/2wIXAh7/qgIXAiD/dwIXAib/dwIXAin/dwIXAiv/dwIXAoz/qgIZAhz/2QIbAS7/5wIbAS//5wIbATH/5wIbATP/5wIbAhD/5wIbAhf/5wIbAhn/5wIbAh//5wIbAiD/5wIbAiL/5wIbAib/5wIbAin/5wIbAiv/5wIcAS7/4QIcAS//4QIcATH/4QIcATP/2wIcAhD/4QIcAh//4QIcAiD/4QIcAiL/0QIcAiP/zwIcAib/4QIcAin/4QIcAir/zwIcAiv/4QIfAS7/yQIfAS//yQIfATH/yQIfATP/yQIfAhD/yQIfAhf/yQIfAh//yQIfAiD/yQIfAiL/yQIfAin/yQIgATL/4wIgAhz/2QIgAiT/yQIgAoz/4wIhATL/4wIhAhz/2QIhAoz/4wIkAS7/yQIkAS//yQIkATH/yQIkATP/yQIkAhD/yQIkAhf/yQIkAiD/yQIkAiL/yQIkAib/yQIkAin/yQIkAiv/yQImATL/4wImAhz/2QImAiT/yQImAoz/4wIpATL/4wIpAhz/2QIpAiT/yQIpAoz/4wIrATL/4wIrAhz/2QIrAiT/yQIrAoz/4wIuAA//BgIuABH/BgIuAKn/dwIuAKr/dwIuALL/0wI0ALb/YAI1ALb/dwI6ALb/jQI6Aj4ARAI6AkH/6QI6AkUALQI6Akj/0wI6Akn/6QI6Akv/0wI6Akz/YAI6Ak3/pgI6Ak7/vAI6AlH/YAI6Alf/0wI6AloAFwI6Amz/0wI6Am3/6QI6Am4AFwI6AncALQI7Ajr/0wI7AkH/6QI7Akj/6QI7Akv/6QI7Akz/pAI7Ak3/0QI7Ak7/6QI7Ak//0wI7AlH/pAI7AlT/vAI7Alf/6QI7Aln/6QI7AmX/6QI7Am3/0wI8Ajr/vAI8Aj7/0wI8AkD/0wI8AkH/vAI8AkX/6QI8Akj/vAI8Akv/vAI8Akz/dwI8Ak3/vAI8Ak7/vAI8Ak//pgI8AlH/pAI8AlT/jQI8Aln/vAI8Al7/6QI8Amb/6QI8Amz/vAI8Am3/6QI8Am//6QI8AnH/vAI8Ann/6QI9AA//BgI9ABH/BgI9AKn/dwI9AKr/dwI9ALL/0wI9Ajr/dwI9Aj7/dwI9AkH/0wI9AkX/jQI9Akb/0QI9Akj/jQI9Akv/pAI9Aln/vAI9Alr/jQI9Alz/jQI9Al7/dwI9Al//dwI9AmL/jQI9AmX/jQI9Amb/jQI9Amf/jQI9Amj/dwI9Amr/jQI9Am3/dwI9AnX/jQI9Anb/jQI9Anj/jQI9Ann/dwI+Ak0AFwI+Ak7/0wI+AlH/ugI+AmEARAI+AmgAFwI+Am0ALQI/AkH/0wI/Amv/6QJAAkH/6QJAAkj/0wJAAkv/6QJAAkwAFwJAAk0ALQJAAlQALQJAAloAFwJAAl//5wJAAmj/6QJAAm3/6QJBAkX/6QJBAkj/6QJBAkv/6QJBAkz/0wJBAk3/6QJBAk7/6QJBAlH/0wJBAln/6QJEAkH/6QJEAkj/6QJEAkv/6QJEAk0AFwJEAk7/ugJFAk7/6QJFAlsAFwJFAm0AFwJGAk7/6QJGAlH/6QJGAloAFwJGAl8AFwJGAmgAFwJGAmsAFwJGAm0AFwJGAnH/6QJGAncAFwJIAjr/0wJIAj7/0wJIAkD/0wJIAkX/6QJIAk3/0wJIAk//pAJIAlH/0wJIAln/0wJIAl7/0wJIAmX/6QJIAm//6QJKAA/+fQJKABH+fQJKAB3/0wJKAB7/0wJKAKr/jQJKAjr/dwJKAj7/dwJKAkD/6QJKAkH/0wJKAkX/jQJKAkb/6QJKAkj/0wJKAkv/6QJKAkz/pAJKAk3/0wJKAk7/6QJKAk//pAJKAln/0wJKAlr/vAJKAl7/YAJKAl//pgJKAmj/pgJKAnf/0wJKAnn/vAJLAjr/0wJLAj7/0wJLAkH/6QJLAkX/vAJLAkb/6QJLAkj/0wJLAkz/vAJLAk3/vAJLAk//jQJLAlH/vAJLAlT/ugJLAlf/6QJLAloAFwJLAmAALQJLAnH/6QJMAA//HQJMABH/HQJMAKn/pgJMAKr/pgJMALL/0wJMAjr/vAJMAj7/vAJMAkAAFwJMAkH/6QJMAkX/0wJMAkj/pAJMAk7/vAJMAln/0wJMAlr/pAJMAlz/pgJMAl//jQJMAmL/pgJMAmT/pgJMAmX/pAJMAmb/pgJMAmj/YAJMAmn/pgJMAmr/jQJMAmv/jQJMAm3/jQJMAm//pgJMAnP/pgJMAnX/pgJMAnb/pgJMAnj/pgJMAnn/jQJNAA/+8AJNABH+8AJNAB3/0wJNAB7/0wJNAKn/pgJNAKr/pAJNALL/6QJNAjr/dwJNAj7/pAJNAkH/0wJNAkX/vAJNAkj/vAJNAk7/vAJNAlf/0wJNAln/0wJNAlv/0wJNAlz/jQJNAl3/pAJNAl7/YAJNAl//dwJNAmD/vAJNAmH/jQJNAmL/pAJNAmP/vAJNAmT/pAJNAmX/dwJNAmb/pAJNAmf/pAJNAmj/dwJNAmn/pAJNAmr/pAJNAmv/dwJNAm//pAJNAnD/pAJNAnL/pAJNAnP/pAJNAnj/pAJNAnn/dwJOAjr/0wJOAj7/vAJOAkX/vAJOAkz/jQJOAk3/pAJOAlH/0wJOAln/ugJOAmX/vAJPAkH/0wJPAkj/vAJPAkv/vAJPAk7/vAJPAlf/ugJPAmj/6QJPAm3/0wJQAkj/0wJQAloALQJTAloAFwJTAm0ALQJUALb/dwJUAln/vAJWALb/YAJWAjr/0wJWAj7/0wJWAkD/vAJWAkH/6QJWAkX/ugJWAkb/0wJWAkj/0wJWAkv/0wJWAkz/MwJWAk//pAJWAlH/YAJWAlf/6QJWAln/pAJXAj7/vAJXAkD/5wJXAkH/6QJXAkX/vAJXAk//ugJXAln/0wJXAl7/vAJXAmAAFwJXAmX/vAJXAmb/6QJXAnn/6QJYAjr/vAJYAj7/pgJYAkD/0wJYAkX/pAJYAkj/6QJYAkv/6QJYAkz/jQJYAk//pAJYAlH/vAJYAl7/pAJYAmX/pAJYAmb/6QJaAmH/6QJaAmz/0wJaAm3/6QJaAnH/0wJbAlr/0QJbAl7/pAJbAl//6QJbAmD/6QJbAmH/0wJbAmX/pAJbAmb/0wJbAmv/6QJbAm3/0wJbAm7/6QJbAm//vAJbAnH/vAJbAnT/vAJbAnf/6QJbAnn/0wJcAlr/6QJcAlv/6QJcAl7/6QJcAl//6QJcAmD/6QJcAmH/6QJcAmX/0QJcAmb/6QJcAmj/6QJcAmv/6QJcAmz/0wJcAm3/0wJcAm7/6QJcAnH/pAJcAnT/vAJcAnn/6QJdAA//BgJdABH/BgJdAlr/0wJdAl7/pAJdAl//0wJdAmH/6QJdAmX/0wJdAmj/0wJdAmv/0wJdAnn/6QJeAnT/0wJeAncAFwJfAlv/6QJfAl7/0wJfAmD/6QJfAmH/0wJfAmX/vAJfAmz/vAJfAm3/6QJfAm//0wJfAnH/vAJgAlsAFwJgAm0AFwJgAnH/6QJgAnQALQJhAlv/6QJhAl7/0wJhAl//6QJhAmH/6QJhAmX/6QJhAmj/6QJhAmv/6QJhAm3/6QJhAm7/6QJhAnH/vAJhAnT/0wJkAloALQJkAlsALQJkAl8AFwJkAmEAFwJkAmUAFwJkAmgAFwJkAmsAFwJkAmwAFwJkAm0AFwJkAncAFwJlAmgAFwJlAnH/0wJmAlv/6QJmAmH/6QJmAm0AFwJoAl7/0wJoAmD/6QJoAmH/6QJoAmX/0wJoAmz/0wJoAm3/6QJoAm//6QJoAnH/0wJqAl7/0QJqAmH/6QJqAmX/ugJqAmz/0wJqAm3/6QJqAm//6QJqAnH/0wJqAnn/6QJrAmAAFwJrAmgAFwJrAnH/6QJrAncAFwJsAA//HQJsABH/HQJsAlr/6QJsAl7/vAJsAl//6QJsAmAARAJsAmX/0wJsAmj/6QJsAmv/6QJsAm0AFwJtAA//MwJtABH/MwJtAKoAFwJtAlr/6QJtAlsAFwJtAl7/vAJtAl//6QJtAmAAFwJtAmX/0wJtAmb/6QJtAmj/5wJtAmr/6QJtAmv/6QJtAm7/6QJtAnf/6QJtAnn/6QJuAlv/6QJuAl7/0wJuAmX/0wJuAmz/0wJuAm3/6QJuAnH/0wJuAnn/6QJvAlr/6QJvAlv/6QJvAl//6QJvAmH/6QJvAmj/6QJvAmv/6QJvAmz/6QJvAm7/6QJvAnH/0wJwAl//6QJwAmH/6QJwAmj/6QJwAmv/6QJzAl//6QJzAmj/6QJzAm0AFwJ2Amz/YAJ2AnH/dwJ3Al7/0wJ3Al8AFwJ3AmH/6QJ3AmX/0wJ3AmgAFwJ3Amz/0wJ3Am//6QJ3Ann/6QJ4Al7/0wJ4AmD/6QJ4AmX/0wJ4Amb/6QJ4Amz/0wJ4Am//6QJ4AnH/0wKGAA//MwKGABH/MwKIAA//BgKIABH/BgKIAB3/0wKIAB7/0wKIAKn/YAKIAKr/YAKIALL/0wKMAS7/4wKMATH/4wKMATP/4wKMAhD/4wKMAhf/4wKMAiD/4wKMAiL/4wKMAib/4wKMAiv/4wABAABNAr8iAjkEJgAAQNoFugAATSBBcmlhbCAgICAgICAgIP////8AP//+QVJMUjAwAABAAAAA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ggQ2BgorBgEEAYI3AgEKAQH/BIIEIzCCBB+gKYAnaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BToYIDuIGCA7RUaGlzIGNlcnRpZmljYXRlIGluY29ycG9yYXRlcyBieSByZWZlcmVuY2UsIGFuZCBpdHMgdXNlIGlzIHN0cmljdGx5CnN1YmplY3QgdG8sIHRoZSBWZXJpU2lnbiBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudCAoQ1BTKQp2ZXJzaW9uIDEuMCwgYXZhaWxhYmxlIGluIHRoZSBWZXJpU2lnbiByZXBvc2l0b3J5IGF0OgpodHRwczovL3d3dy52ZXJpc2lnbi5jb207IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBvcgpieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1vdW50YWluIFZpZXcsIENBIDk0MDQzClVTQSBDb3B5cmlnaHQgKGMpMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQ0VSVEFJTgpXQVJSQU5USUVTIERJU0NMQUlNRUQgQU5EIExJQUJJTElUWSBMSU1JVEVELgoKV0FSTklORzogVEhFIFVTRSBPRiBUSElTIENFUlRJRklDQVRFIElTIFNUUklDVExZIFNVQkpFQ1QgVE8gVEhFClZFUklTSUdOIENFUlRJRklDQVRJT04gUFJBQ1RJQ0UgU1RBVEVNRU5ULiAgVEhFIElTU1VJTkcgQVVUSE9SSVRZCkRJU0NMQUlNUyBDRVJUQUlOIElNUExJRUQgQU5EIEVYUFJFU1MgV0FSUkFOVElFUywgSU5DTFVESU5HIFdBUlJBTlRJRVMKT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgV0lMTCBOT1QKQkUgTElBQkxFIEZPUiBDT05TRVFVRU5USUFMLCBQVU5JVElWRSwgQU5EIENFUlRBSU4gT1RIRVIgREFNQUdFUy4gU0VFClRIRSBDUFMgRk9SIERFVEFJTFMuCgpDb250ZW50cyBvZiB0aGUgVmVyaVNpZ24gcmVnaXN0ZXJlZCBub252ZXJpZmllZFN1YmplY3RBdHRyaWJ1dGVzCmV4dGVuc2lvbiB2YWx1ZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBhcyBhY2N1cmF0ZSBpbmZvcm1hdGlvbgp2YWxpZGF0ZWQgYnkgdGhlIElBLgqjNoA0aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvdmVyaXNpZ25sb2dvLmdpZjCCAh8GA1UdAwSCAhYwggISMIICDjCCAgoGC2CGSAGG+EUBBwEBMIIB+RaCAadUaGlzIGNlcnRpZmljYXRlIGluY29ycG9yYXRlcyBieSByZWZlcmVuY2UsIGFuZCBpdHMgdXNlIGlzIHN0cmljdGx5IHN1YmplY3QgdG8sIHRoZSBWZXJpU2lnbiBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudCAoQ1BTKSwgYXZhaWxhYmxlIGF0OiBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vQ1BTOyBieSBFLW1haWwgYXQgQ1BTLXJlcXVlc3RzQHZlcmlzaWduLmNvbTsgb3IgYnkgbWFpbCBhdCBWZXJpU2lnbiwgSW5jLiwgMjU5MyBDb2FzdCBBdmUuLCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0MyBVU0EgVGVsLiArMSAoNDE1KSA5NjEtODgzMCBDb3B5cmlnaHQgKGMpIDE5OTYgVmVyaVNpZ24sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIENFUlRBSU4gV0FSUkFOVElFUyBESVNDTEFJTUVEIGFuZCBMSUFCSUxJVFkgTElNSVRFRC6gDgYMYIZIAYb4RQEHAQEBoQ4GDGCGSAGG+EUBBwEBAjAsMCoWKGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L0NQUyAwFgYKKwYBBAGCNwIBGwQIMAYBAf8BAf8wDQYJKoZIhvcNAQEEBQADgYEAQdoWjxEbg6og6h4XHsRzI3ACxthp22HHZkiaKfngFtX8mrj45THYpopuFuHHqK17CgaeeDNlsFhL4Fqbn25mZkT8wdpdZFiP/9WNTsE2PysW3zJvhpJq2FHzbfM8FrxMTxhKdZ3ugvzPvBHj+hcHteRCliEbiHerIEKV+N8bol0xggQsMIIEKAIBATB1MGExETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEzMDEGA1UECxMqVmVyaVNpZ24gQ29tbWVyY2lhbCBTb2Z0d2FyZSBQdWJsaXNoZXJzIENBAhB18o74qPvqbRFSlxSVS2VcMAwGCCqGSIb3DQIFBQCggbowGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARYwHwYJKoZIhvcNAQkEMRIEELwHNdrct77xGQtgUZaqmdAwXgYKKwYBBAGCNwIBDDFQME6gJoAkAEEAcgBpAGEAbAAgAFIAZQBnAHUAbABhAHIAIABGAG8AbgB0oSSAImh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90cnVldHlwZS8wDQYJKoZIhvcNAQEBBQAEgYCRFieigzsnJtE1cMkW4963HTKnGdx4JOdFOceWCDmjnGOGRRiH/3De7NY6gfA/U69RL4+oskQtlUtl7F1maj2kyVlyyI37lLWWXOe/bJ80H9RQ3guFDmEzvzb3rUMsvOjdjQ5074ESWfU9iMN9+7esORu7loF74pCtIj46YmSaaqGCAk0wggJJBgkqhkiG9w0BCQYxggI6MIICNgIBATCBtDCBnjEfMB0GA1UEChMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEXMBUGA1UECxMOVmVyaVNpZ24sIEluYy4xLDAqBgNVBAsTI1ZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZSBSb290MTQwMgYDVQQLEytOTyBMSUFCSUxJVFkgQUNDRVBURUQsIChjKTk3IFZlcmlTaWduLCBJbmMuAhEA/KSlnywPwLkDmDMbe1RUHTAMBggqhkiG9w0CBQUAoFkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDAwNTExMTg0ODU1WjAfBgkqhkiG9w0BCQQxEgQQZdd+AUltlDum35wDETIhhzANBgkqhkiG9w0BAQEFAASCAQDEFPm3kvczCYPtP4reiXz1mtLdb2dpZh65KqlwudSnRGiglxEKACE8mLCguibQKk7dbv6yjyACJ2Np3RDFuf18XA2t17QW+w9XedGBz4KDMp41bhfkH+MOLSmgfHaHgcqh7SzDhe9hkEotcxxjWKHVczScXhCc2FoZWkxhMACO6+O+p9Tf5XZTs6+ejOlbmF/lpBlQJR37Wo4iUaGePLHWcqnOu+zOlvQJ/JXutfzxGwBjjjIv0r2cJI5MdJMWMVjju96oa9VHrrv54FqM2REfYcYQIpSwZ+p4zX9T7ZBaNz+kLxQhQqBjddkei2ESGlRMEofrJEpbuxhKTUaXBzsxAA==\"","var Typr={};Typr.parse=function(buff){var bin=Typr._bin;var data=new Uint8Array(buff);var offset=0;var sfnt_version=bin.readFixed(data,offset);offset+=4;var numTables=bin.readUshort(data,offset);offset+=2;var searchRange=bin.readUshort(data,offset);offset+=2;var entrySelector=bin.readUshort(data,offset);offset+=2;var rangeShift=bin.readUshort(data,offset);offset+=2;var tags=[\"cmap\",\"head\",\"hhea\",\"maxp\",\"hmtx\",\"name\",\"OS/2\",\"post\",\"loca\",\"glyf\",\"kern\",\"CFF \",\"GPOS\",\"GSUB\",\"SVG \"];var obj={_data:data};var tabs={};for(var i=0;i<numTables;i++){var tag=bin.readASCII(data,offset,4);offset+=4;var checkSum=bin.readUint(data,offset);offset+=4;var toffset=bin.readUint(data,offset);offset+=4;var length=bin.readUint(data,offset);offset+=4;tabs[tag]={offset:toffset,length:length}}for(var i=0;i<tags.length;i++){var t=tags[i];if(tabs[t])obj[t.trim()]=Typr[t.trim()].parse(data,tabs[t].offset,tabs[t].length,obj)}return obj};Typr._tabOffset=function(data,tab){var bin=Typr._bin;var numTables=bin.readUshort(data,4);var offset=12;for(var i=0;i<numTables;i++){var tag=bin.readASCII(data,offset,4);offset+=4;var checkSum=bin.readUint(data,offset);offset+=4;var toffset=bin.readUint(data,offset);offset+=4;var length=bin.readUint(data,offset);offset+=4;if(tag==tab)return toffset}return 0};Typr._bin={readFixed:function(data,o){return(data[o]<<8|data[o+1])+(data[o+2]<<8|data[o+3])/(256*256+4)},readF2dot14:function(data,o){var num=Typr._bin.readShort(data,o);return num/16384;var intg=num>>14,frac=(num&16383)/(16383+1);return intg>0?intg+frac:intg-frac},readInt:function(buff,p){var a=Typr._bin.t.uint8;a[0]=buff[p+3];a[1]=buff[p+2];a[2]=buff[p+1];a[3]=buff[p];return Typr._bin.t.int32[0]},readInt8:function(buff,p){var a=Typr._bin.t.uint8;a[0]=buff[p];return Typr._bin.t.int8[0]},readShort:function(buff,p){var a=Typr._bin.t.uint8;a[1]=buff[p];a[0]=buff[p+1];return Typr._bin.t.int16[0]},readUshort:function(buff,p){return buff[p]<<8|buff[p+1]},readUshorts:function(buff,p,len){var arr=[];for(var i=0;i<len;i++)arr.push(Typr._bin.readUshort(buff,p+i*2));return arr},readUint:function(buff,p){var a=Typr._bin.t.uint8;a[3]=buff[p];a[2]=buff[p+1];a[1]=buff[p+2];a[0]=buff[p+3];return Typr._bin.t.uint32[0]},readUint64:function(buff,p){return Typr._bin.readUint(buff,p)*(4294967295+1)+Typr._bin.readUint(buff,p+4)},readASCII:function(buff,p,l){var s=\"\";for(var i=0;i<l;i++)s+=String.fromCharCode(buff[p+i]);return s},readUnicode:function(buff,p,l){var s=\"\";for(var i=0;i<l;i++){var c=buff[p++]<<8|buff[p++];s+=String.fromCharCode(c)}return s},_tdec:window[\"TextDecoder\"]?new window[\"TextDecoder\"]:null,readUTF8:function(buff,p,l){var tdec=Typr._bin._tdec;if(tdec&&p==0&&l==buff.length)return tdec[\"decode\"](buff);return Typr._bin.readASCII(buff,p,l)},readBytes:function(buff,p,l){var arr=[];for(var i=0;i<l;i++)arr.push(buff[p+i]);return arr},readASCIIArray:function(buff,p,l){var s=[];for(var i=0;i<l;i++)s.push(String.fromCharCode(buff[p+i]));return s}};Typr._bin.t={buff:new ArrayBuffer(8)};Typr._bin.t.int8=new Int8Array(Typr._bin.t.buff);Typr._bin.t.uint8=new Uint8Array(Typr._bin.t.buff);Typr._bin.t.int16=new Int16Array(Typr._bin.t.buff);Typr._bin.t.uint16=new Uint16Array(Typr._bin.t.buff);Typr._bin.t.int32=new Int32Array(Typr._bin.t.buff);Typr._bin.t.uint32=new Uint32Array(Typr._bin.t.buff);Typr._lctf={};Typr._lctf.parse=function(data,offset,length,font,subt){var bin=Typr._bin;var obj={};var offset0=offset;var tableVersion=bin.readFixed(data,offset);offset+=4;var offScriptList=bin.readUshort(data,offset);offset+=2;var offFeatureList=bin.readUshort(data,offset);offset+=2;var offLookupList=bin.readUshort(data,offset);offset+=2;obj.scriptList=Typr._lctf.readScriptList(data,offset0+offScriptList);obj.featureList=Typr._lctf.readFeatureList(data,offset0+offFeatureList);obj.lookupList=Typr._lctf.readLookupList(data,offset0+offLookupList,subt);return obj};Typr._lctf.readLookupList=function(data,offset,subt){var bin=Typr._bin;var offset0=offset;var obj=[];var count=bin.readUshort(data,offset);offset+=2;for(var i=0;i<count;i++){var noff=bin.readUshort(data,offset);offset+=2;var lut=Typr._lctf.readLookupTable(data,offset0+noff,subt);obj.push(lut)}return obj};Typr._lctf.readLookupTable=function(data,offset,subt){var bin=Typr._bin;var offset0=offset;var obj={tabs:[]};obj.ltype=bin.readUshort(data,offset);offset+=2;obj.flag=bin.readUshort(data,offset);offset+=2;var cnt=bin.readUshort(data,offset);offset+=2;for(var i=0;i<cnt;i++){var noff=bin.readUshort(data,offset);offset+=2;var tab=subt(data,obj.ltype,offset0+noff);obj.tabs.push(tab)}return obj};Typr._lctf.numOfOnes=function(n){var num=0;for(var i=0;i<32;i++)if((n>>>i&1)!=0)num++;return num};Typr._lctf.readClassDef=function(data,offset){var bin=Typr._bin;var obj=[];var format=bin.readUshort(data,offset);offset+=2;if(format==1){var startGlyph=bin.readUshort(data,offset);offset+=2;var glyphCount=bin.readUshort(data,offset);offset+=2;for(var i=0;i<glyphCount;i++){obj.push(startGlyph+i);obj.push(startGlyph+i);obj.push(bin.readUshort(data,offset));offset+=2}}if(format==2){var count=bin.readUshort(data,offset);offset+=2;for(var i=0;i<count;i++){obj.push(bin.readUshort(data,offset));offset+=2;obj.push(bin.readUshort(data,offset));offset+=2;obj.push(bin.readUshort(data,offset));offset+=2}}return obj};Typr._lctf.getInterval=function(tab,val){for(var i=0;i<tab.length;i+=3){var start=tab[i],end=tab[i+1],index=tab[i+2];if(start<=val&&val<=end)return i}return-1};Typr._lctf.readValueRecord=function(data,offset,valFmt){var bin=Typr._bin;var arr=[];arr.push(valFmt&1?bin.readShort(data,offset):0);offset+=valFmt&1?2:0;arr.push(valFmt&2?bin.readShort(data,offset):0);offset+=valFmt&2?2:0;arr.push(valFmt&4?bin.readShort(data,offset):0);offset+=valFmt&4?2:0;arr.push(valFmt&8?bin.readShort(data,offset):0);offset+=valFmt&8?2:0;return arr};Typr._lctf.readCoverage=function(data,offset){var bin=Typr._bin;var cvg={};cvg.fmt=bin.readUshort(data,offset);offset+=2;var count=bin.readUshort(data,offset);offset+=2;if(cvg.fmt==1)cvg.tab=bin.readUshorts(data,offset,count);if(cvg.fmt==2)cvg.tab=bin.readUshorts(data,offset,count*3);return cvg};Typr._lctf.coverageIndex=function(cvg,val){var tab=cvg.tab;if(cvg.fmt==1)return tab.indexOf(val);if(cvg.fmt==2){var ind=Typr._lctf.getInterval(tab,val);if(ind!=-1)return tab[ind+2]+(val-tab[ind])}return-1};Typr._lctf.readFeatureList=function(data,offset){var bin=Typr._bin;var offset0=offset;var obj=[];var count=bin.readUshort(data,offset);offset+=2;for(var i=0;i<count;i++){var tag=bin.readASCII(data,offset,4);offset+=4;var noff=bin.readUshort(data,offset);offset+=2;obj.push({tag:tag.trim(),tab:Typr._lctf.readFeatureTable(data,offset0+noff)})}return obj};Typr._lctf.readFeatureTable=function(data,offset){var bin=Typr._bin;var featureParams=bin.readUshort(data,offset);offset+=2;var lookupCount=bin.readUshort(data,offset);offset+=2;var indices=[];for(var i=0;i<lookupCount;i++)indices.push(bin.readUshort(data,offset+2*i));return indices};Typr._lctf.readScriptList=function(data,offset){var bin=Typr._bin;var offset0=offset;var obj={};var count=bin.readUshort(data,offset);offset+=2;for(var i=0;i<count;i++){var tag=bin.readASCII(data,offset,4);offset+=4;var noff=bin.readUshort(data,offset);offset+=2;obj[tag.trim()]=Typr._lctf.readScriptTable(data,offset0+noff)}return obj};Typr._lctf.readScriptTable=function(data,offset){var bin=Typr._bin;var offset0=offset;var obj={};var defLangSysOff=bin.readUshort(data,offset);offset+=2;obj.default=Typr._lctf.readLangSysTable(data,offset0+defLangSysOff);var langSysCount=bin.readUshort(data,offset);offset+=2;for(var i=0;i<langSysCount;i++){var tag=bin.readASCII(data,offset,4);offset+=4;var langSysOff=bin.readUshort(data,offset);offset+=2;obj[tag.trim()]=Typr._lctf.readLangSysTable(data,offset0+langSysOff)}return obj};Typr._lctf.readLangSysTable=function(data,offset){var bin=Typr._bin;var obj={};var lookupOrder=bin.readUshort(data,offset);offset+=2;obj.reqFeature=bin.readUshort(data,offset);offset+=2;var featureCount=bin.readUshort(data,offset);offset+=2;obj.features=bin.readUshorts(data,offset,featureCount);return obj};Typr.CFF={};Typr.CFF.parse=function(data,offset,length){var bin=Typr._bin;data=new Uint8Array(data.buffer,offset,length);offset=0;var major=data[offset];offset++;var minor=data[offset];offset++;var hdrSize=data[offset];offset++;var offsize=data[offset];offset++;var ninds=[];offset=Typr.CFF.readIndex(data,offset,ninds);var names=[];for(var i=0;i<ninds.length-1;i++)names.push(bin.readASCII(data,offset+ninds[i],ninds[i+1]-ninds[i]));offset+=ninds[ninds.length-1];var tdinds=[];offset=Typr.CFF.readIndex(data,offset,tdinds);var topDicts=[];for(var i=0;i<tdinds.length-1;i++)topDicts.push(Typr.CFF.readDict(data,offset+tdinds[i],offset+tdinds[i+1]));offset+=tdinds[tdinds.length-1];var topdict=topDicts[0];var sinds=[];offset=Typr.CFF.readIndex(data,offset,sinds);var strings=[];for(var i=0;i<sinds.length-1;i++)strings.push(bin.readASCII(data,offset+sinds[i],sinds[i+1]-sinds[i]));offset+=sinds[sinds.length-1];Typr.CFF.readSubrs(data,offset,topdict);if(topdict.CharStrings){offset=topdict.CharStrings;var sinds=[];offset=Typr.CFF.readIndex(data,offset,sinds);var cstr=[];for(var i=0;i<sinds.length-1;i++)cstr.push(bin.readBytes(data,offset+sinds[i],sinds[i+1]-sinds[i]));topdict.CharStrings=cstr}if(topdict.Encoding)topdict.Encoding=Typr.CFF.readEncoding(data,topdict.Encoding,topdict.CharStrings.length);if(topdict.charset)topdict.charset=Typr.CFF.readCharset(data,topdict.charset,topdict.CharStrings.length);if(topdict.Private){offset=topdict.Private[1];topdict.Private=Typr.CFF.readDict(data,offset,offset+topdict.Private[0]);if(topdict.Private.Subrs)Typr.CFF.readSubrs(data,offset+topdict.Private.Subrs,topdict.Private)}var obj={};for(var p in topdict){if([\"FamilyName\",\"FullName\",\"Notice\",\"version\",\"Copyright\"].indexOf(p)!=-1)obj[p]=strings[topdict[p]-426+35];else obj[p]=topdict[p]}return obj};Typr.CFF.readSubrs=function(data,offset,obj){var bin=Typr._bin;var gsubinds=[];offset=Typr.CFF.readIndex(data,offset,gsubinds);var bias,nSubrs=gsubinds.length;if(false)bias=0;else if(nSubrs<1240)bias=107;else if(nSubrs<33900)bias=1131;else bias=32768;obj.Bias=bias;obj.Subrs=[];for(var i=0;i<gsubinds.length-1;i++)obj.Subrs.push(bin.readBytes(data,offset+gsubinds[i],gsubinds[i+1]-gsubinds[i]))};Typr.CFF.tableSE=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,111,112,113,114,0,115,116,117,118,119,120,121,122,0,123,0,124,125,126,127,128,129,130,131,0,132,133,0,134,135,136,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,139,0,0,0,0,140,141,142,143,0,0,0,0,0,144,0,0,0,145,0,0,146,147,148,149,0,0,0,0];Typr.CFF.glyphByUnicode=function(cff,code){for(var i=0;i<cff.charset.length;i++)if(cff.charset[i]==code)return i;return-1};Typr.CFF.glyphBySE=function(cff,charcode){if(charcode<0||charcode>255)return-1;return Typr.CFF.glyphByUnicode(cff,Typr.CFF.tableSE[charcode])};Typr.CFF.readEncoding=function(data,offset,num){var bin=Typr._bin;var array=[\".notdef\"];var format=data[offset];offset++;if(format==0){var nCodes=data[offset];offset++;for(var i=0;i<nCodes;i++)array.push(data[offset+i])}else throw\"error: unknown encoding format: \"+format;return array};Typr.CFF.readCharset=function(data,offset,num){var bin=Typr._bin;var charset=[\".notdef\"];var format=data[offset];offset++;if(format==0){for(var i=0;i<num;i++){var first=bin.readUshort(data,offset);offset+=2;charset.push(first)}}else if(format==1||format==2){while(charset.length<num){var first=bin.readUshort(data,offset);offset+=2;var nLeft=0;if(format==1){nLeft=data[offset];offset++}else{nLeft=bin.readUshort(data,offset);offset+=2}for(var i=0;i<=nLeft;i++){charset.push(first);first++}}}else throw\"error: format: \"+format;return charset};Typr.CFF.readIndex=function(data,offset,inds){var bin=Typr._bin;var count=bin.readUshort(data,offset);offset+=2;var offsize=data[offset];offset++;if(offsize==1)for(var i=0;i<count+1;i++)inds.push(data[offset+i]);else if(offsize==2)for(var i=0;i<count+1;i++)inds.push(bin.readUshort(data,offset+i*2));else if(offsize==3)for(var i=0;i<count+1;i++)inds.push(bin.readUint(data,offset+i*3-1)&16777215);else if(count!=0)throw\"unsupported offset size: \"+offsize+\", count: \"+count;offset+=(count+1)*offsize;return offset-1};Typr.CFF.getCharString=function(data,offset,o){var bin=Typr._bin;var b0=data[offset],b1=data[offset+1],b2=data[offset+2],b3=data[offset+3],b4=data[offset+4];var vs=1;var op=null,val=null;if(b0<=20){op=b0;vs=1}if(b0==12){op=b0*100+b1;vs=2}if(21<=b0&&b0<=27){op=b0;vs=1}if(b0==28){val=bin.readShort(data,offset+1);vs=3}if(29<=b0&&b0<=31){op=b0;vs=1}if(32<=b0&&b0<=246){val=b0-139;vs=1}if(247<=b0&&b0<=250){val=(b0-247)*256+b1+108;vs=2}if(251<=b0&&b0<=254){val=-(b0-251)*256-b1-108;vs=2}if(b0==255){val=bin.readInt(data,offset+1)/65535;vs=5}o.val=val!=null?val:\"o\"+op;o.size=vs};Typr.CFF.readCharString=function(data,offset,length){var end=offset+length;var bin=Typr._bin;var arr=[];while(offset<end){var b0=data[offset],b1=data[offset+1],b2=data[offset+2],b3=data[offset+3],b4=data[offset+4];var vs=1;var op=null,val=null;if(b0<=20){op=b0;vs=1}if(b0==12){op=b0*100+b1;vs=2}if(b0==19||b0==20){op=b0;vs=2}if(21<=b0&&b0<=27){op=b0;vs=1}if(b0==28){val=bin.readShort(data,offset+1);vs=3}if(29<=b0&&b0<=31){op=b0;vs=1}if(32<=b0&&b0<=246){val=b0-139;vs=1}if(247<=b0&&b0<=250){val=(b0-247)*256+b1+108;vs=2}if(251<=b0&&b0<=254){val=-(b0-251)*256-b1-108;vs=2}if(b0==255){val=bin.readInt(data,offset+1)/65535;vs=5}arr.push(val!=null?val:\"o\"+op);offset+=vs}return arr};Typr.CFF.readDict=function(data,offset,end){var bin=Typr._bin;var dict={};var carr=[];while(offset<end){var b0=data[offset],b1=data[offset+1],b2=data[offset+2],b3=data[offset+3],b4=data[offset+4];var vs=1;var key=null,val=null;if(b0==28){val=bin.readShort(data,offset+1);vs=3}if(b0==29){val=bin.readInt(data,offset+1);vs=5}if(32<=b0&&b0<=246){val=b0-139;vs=1}if(247<=b0&&b0<=250){val=(b0-247)*256+b1+108;vs=2}if(251<=b0&&b0<=254){val=-(b0-251)*256-b1-108;vs=2}if(b0==255){val=bin.readInt(data,offset+1)/65535;vs=5;throw\"unknown number\"}if(b0==30){var nibs=[];vs=1;while(true){var b=data[offset+vs];vs++;var nib0=b>>4,nib1=b&15;if(nib0!=15)nibs.push(nib0);if(nib1!=15)nibs.push(nib1);if(nib1==15)break}var s=\"\";var chars=[0,1,2,3,4,5,6,7,8,9,\".\",\"e\",\"e-\",\"reserved\",\"-\",\"endOfNumber\"];for(var i=0;i<nibs.length;i++)s+=chars[nibs[i]];val=parseFloat(s)}if(b0<=21){var keys=[\"version\",\"Notice\",\"FullName\",\"FamilyName\",\"Weight\",\"FontBBox\",\"BlueValues\",\"OtherBlues\",\"FamilyBlues\",\"FamilyOtherBlues\",\"StdHW\",\"StdVW\",\"escape\",\"UniqueID\",\"XUID\",\"charset\",\"Encoding\",\"CharStrings\",\"Private\",\"Subrs\",\"defaultWidthX\",\"nominalWidthX\"];key=keys[b0];vs=1;if(b0==12){var keys=[\"Copyright\",\"isFixedPitch\",\"ItalicAngle\",\"UnderlinePosition\",\"UnderlineThickness\",\"PaintType\",\"CharstringType\",\"FontMatrix\",\"StrokeWidth\",\"BlueScale\",\"BlueShift\",\"BlueFuzz\",\"StemSnapH\",\"StemSnapV\",\"ForceBold\",0,0,\"LanguageGroup\",\"ExpansionFactor\",\"initialRandomSeed\",\"SyntheticBase\",\"PostScript\",\"BaseFontName\",\"BaseFontBlend\",0,0,0,0,0,0,\"ROS\",\"CIDFontVersion\",\"CIDFontRevision\",\"CIDFontType\",\"CIDCount\",\"UIDBase\",\"FDArray\",\"FDSelect\",\"FontName\"];key=keys[b1];vs=2}}if(key!=null){dict[key]=carr.length==1?carr[0]:carr;carr=[]}else carr.push(val);offset+=vs}return dict};Typr.cmap={};Typr.cmap.parse=function(data,offset,length){data=new Uint8Array(data.buffer,offset,length);offset=0;var offset0=offset;var bin=Typr._bin;var obj={};var version=bin.readUshort(data,offset);offset+=2;var numTables=bin.readUshort(data,offset);offset+=2;var offs=[];obj.tables=[];for(var i=0;i<numTables;i++){var platformID=bin.readUshort(data,offset);offset+=2;var encodingID=bin.readUshort(data,offset);offset+=2;var noffset=bin.readUint(data,offset);offset+=4;var id=\"p\"+platformID+\"e\"+encodingID;var tind=offs.indexOf(noffset);if(tind==-1){tind=obj.tables.length;var subt;offs.push(noffset);var format=bin.readUshort(data,noffset);if(format==0)subt=Typr.cmap.parse0(data,noffset);else if(format==4)subt=Typr.cmap.parse4(data,noffset);else if(format==6)subt=Typr.cmap.parse6(data,noffset);else if(format==12)subt=Typr.cmap.parse12(data,noffset);else console.log(\"unknown format: \"+format,platformID,encodingID,noffset);obj.tables.push(subt)}if(obj[id]!=null)throw\"multiple tables for one platform+encoding\";obj[id]=tind}return obj};Typr.cmap.parse0=function(data,offset){var bin=Typr._bin;var obj={};obj.format=bin.readUshort(data,offset);offset+=2;var len=bin.readUshort(data,offset);offset+=2;var lang=bin.readUshort(data,offset);offset+=2;obj.map=[];for(var i=0;i<len-6;i++)obj.map.push(data[offset+i]);return obj};Typr.cmap.parse4=function(data,offset){var bin=Typr._bin;var offset0=offset;var obj={};obj.format=bin.readUshort(data,offset);offset+=2;var length=bin.readUshort(data,offset);offset+=2;var language=bin.readUshort(data,offset);offset+=2;var segCountX2=bin.readUshort(data,offset);offset+=2;var segCount=segCountX2/2;obj.searchRange=bin.readUshort(data,offset);offset+=2;obj.entrySelector=bin.readUshort(data,offset);offset+=2;obj.rangeShift=bin.readUshort(data,offset);offset+=2;obj.endCount=bin.readUshorts(data,offset,segCount);offset+=segCount*2;offset+=2;obj.startCount=bin.readUshorts(data,offset,segCount);offset+=segCount*2;obj.idDelta=[];for(var i=0;i<segCount;i++){obj.idDelta.push(bin.readShort(data,offset));offset+=2}obj.idRangeOffset=bin.readUshorts(data,offset,segCount);offset+=segCount*2;obj.glyphIdArray=[];while(offset<offset0+length){obj.glyphIdArray.push(bin.readUshort(data,offset));offset+=2}return obj};Typr.cmap.parse6=function(data,offset){var bin=Typr._bin;var offset0=offset;var obj={};obj.format=bin.readUshort(data,offset);offset+=2;var length=bin.readUshort(data,offset);offset+=2;var language=bin.readUshort(data,offset);offset+=2;obj.firstCode=bin.readUshort(data,offset);offset+=2;var entryCount=bin.readUshort(data,offset);offset+=2;obj.glyphIdArray=[];for(var i=0;i<entryCount;i++){obj.glyphIdArray.push(bin.readUshort(data,offset));offset+=2}return obj};Typr.cmap.parse12=function(data,offset){var bin=Typr._bin;var offset0=offset;var obj={};obj.format=bin.readUshort(data,offset);offset+=2;offset+=2;var length=bin.readUint(data,offset);offset+=4;var lang=bin.readUint(data,offset);offset+=4;var nGroups=bin.readUint(data,offset);offset+=4;obj.groups=[];for(var i=0;i<nGroups;i++){var off=offset+i*12;var startCharCode=bin.readUint(data,off+0);var endCharCode=bin.readUint(data,off+4);var startGlyphID=bin.readUint(data,off+8);obj.groups.push([startCharCode,endCharCode,startGlyphID])}return obj};Typr.glyf={};Typr.glyf.parse=function(data,offset,length,font){var obj=[];for(var g=0;g<font.maxp.numGlyphs;g++)obj.push(null);return obj};Typr.glyf._parseGlyf=function(font,g){var bin=Typr._bin;var data=font._data;var offset=Typr._tabOffset(data,\"glyf\")+font.loca[g];if(font.loca[g]==font.loca[g+1])return null;var gl={};gl.noc=bin.readShort(data,offset);offset+=2;gl.xMin=bin.readShort(data,offset);offset+=2;gl.yMin=bin.readShort(data,offset);offset+=2;gl.xMax=bin.readShort(data,offset);offset+=2;gl.yMax=bin.readShort(data,offset);offset+=2;if(gl.xMin>=gl.xMax||gl.yMin>=gl.yMax)return null;if(gl.noc>0){gl.endPts=[];for(var i=0;i<gl.noc;i++){gl.endPts.push(bin.readUshort(data,offset));offset+=2}var instructionLength=bin.readUshort(data,offset);offset+=2;if(data.length-offset<instructionLength)return null;gl.instructions=bin.readBytes(data,offset,instructionLength);offset+=instructionLength;var crdnum=gl.endPts[gl.noc-1]+1;gl.flags=[];for(var i=0;i<crdnum;i++){var flag=data[offset];offset++;gl.flags.push(flag);if((flag&8)!=0){var rep=data[offset];offset++;for(var j=0;j<rep;j++){gl.flags.push(flag);i++}}}gl.xs=[];for(var i=0;i<crdnum;i++){var i8=(gl.flags[i]&2)!=0,same=(gl.flags[i]&16)!=0;if(i8){gl.xs.push(same?data[offset]:-data[offset]);offset++}else{if(same)gl.xs.push(0);else{gl.xs.push(bin.readShort(data,offset));offset+=2}}}gl.ys=[];for(var i=0;i<crdnum;i++){var i8=(gl.flags[i]&4)!=0,same=(gl.flags[i]&32)!=0;if(i8){gl.ys.push(same?data[offset]:-data[offset]);offset++}else{if(same)gl.ys.push(0);else{gl.ys.push(bin.readShort(data,offset));offset+=2}}}var x=0,y=0;for(var i=0;i<crdnum;i++){x+=gl.xs[i];y+=gl.ys[i];gl.xs[i]=x;gl.ys[i]=y}}else{var ARG_1_AND_2_ARE_WORDS=1<<0;var ARGS_ARE_XY_VALUES=1<<1;var ROUND_XY_TO_GRID=1<<2;var WE_HAVE_A_SCALE=1<<3;var RESERVED=1<<4;var MORE_COMPONENTS=1<<5;var WE_HAVE_AN_X_AND_Y_SCALE=1<<6;var WE_HAVE_A_TWO_BY_TWO=1<<7;var WE_HAVE_INSTRUCTIONS=1<<8;var USE_MY_METRICS=1<<9;var OVERLAP_COMPOUND=1<<10;var SCALED_COMPONENT_OFFSET=1<<11;var UNSCALED_COMPONENT_OFFSET=1<<12;gl.parts=[];var flags;do{flags=bin.readUshort(data,offset);offset+=2;var part={m:{a:1,b:0,c:0,d:1,tx:0,ty:0},p1:-1,p2:-1};gl.parts.push(part);part.glyphIndex=bin.readUshort(data,offset);offset+=2;if(flags&ARG_1_AND_2_ARE_WORDS){var arg1=bin.readShort(data,offset);offset+=2;var arg2=bin.readShort(data,offset);offset+=2}else{var arg1=bin.readInt8(data,offset);offset++;var arg2=bin.readInt8(data,offset);offset++}if(flags&ARGS_ARE_XY_VALUES){part.m.tx=arg1;part.m.ty=arg2}else{part.p1=arg1;part.p2=arg2}if(flags&WE_HAVE_A_SCALE){part.m.a=part.m.d=bin.readF2dot14(data,offset);offset+=2}else if(flags&WE_HAVE_AN_X_AND_Y_SCALE){part.m.a=bin.readF2dot14(data,offset);offset+=2;part.m.d=bin.readF2dot14(data,offset);offset+=2}else if(flags&WE_HAVE_A_TWO_BY_TWO){part.m.a=bin.readF2dot14(data,offset);offset+=2;part.m.b=bin.readF2dot14(data,offset);offset+=2;part.m.c=bin.readF2dot14(data,offset);offset+=2;part.m.d=bin.readF2dot14(data,offset);offset+=2}}while(flags&MORE_COMPONENTS);if(flags&WE_HAVE_INSTRUCTIONS){var numInstr=bin.readUshort(data,offset);offset+=2;gl.instr=[];for(var i=0;i<numInstr;i++){gl.instr.push(data[offset]);offset++}}}return gl};Typr.GPOS={};Typr.GPOS.parse=function(data,offset,length,font){return Typr._lctf.parse(data,offset,length,font,Typr.GPOS.subt)};Typr.GPOS.subt=function(data,ltype,offset){if(ltype!=2)return null;var bin=Typr._bin,offset0=offset,tab={};tab.format=bin.readUshort(data,offset);offset+=2;var covOff=bin.readUshort(data,offset);offset+=2;tab.coverage=Typr._lctf.readCoverage(data,covOff+offset0);tab.valFmt1=bin.readUshort(data,offset);offset+=2;tab.valFmt2=bin.readUshort(data,offset);offset+=2;var ones1=Typr._lctf.numOfOnes(tab.valFmt1);var ones2=Typr._lctf.numOfOnes(tab.valFmt2);if(tab.format==1){tab.pairsets=[];var count=bin.readUshort(data,offset);offset+=2;for(var i=0;i<count;i++){var psoff=bin.readUshort(data,offset);offset+=2;psoff+=offset0;var pvcount=bin.readUshort(data,psoff);psoff+=2;var arr=[];for(var j=0;j<pvcount;j++){var gid2=bin.readUshort(data,psoff);psoff+=2;var value1,value2;if(tab.valFmt1!=0){value1=Typr._lctf.readValueRecord(data,psoff,tab.valFmt1);psoff+=ones1*2}if(tab.valFmt2!=0){value2=Typr._lctf.readValueRecord(data,psoff,tab.valFmt2);psoff+=ones2*2}arr.push({gid2:gid2,val1:value1,val2:value2})}tab.pairsets.push(arr)}}if(tab.format==2){var classDef1=bin.readUshort(data,offset);offset+=2;var classDef2=bin.readUshort(data,offset);offset+=2;var class1Count=bin.readUshort(data,offset);offset+=2;var class2Count=bin.readUshort(data,offset);offset+=2;tab.classDef1=Typr._lctf.readClassDef(data,offset0+classDef1);tab.classDef2=Typr._lctf.readClassDef(data,offset0+classDef2);tab.matrix=[];for(var i=0;i<class1Count;i++){var row=[];for(var j=0;j<class2Count;j++){var value1=null,value2=null;if(tab.valFmt1!=0){value1=Typr._lctf.readValueRecord(data,offset,tab.valFmt1);offset+=ones1*2}if(tab.valFmt2!=0){value2=Typr._lctf.readValueRecord(data,offset,tab.valFmt2);offset+=ones2*2}row.push({val1:value1,val2:value2})}tab.matrix.push(row)}}return tab};Typr.GSUB={};Typr.GSUB.parse=function(data,offset,length,font){return Typr._lctf.parse(data,offset,length,font,Typr.GSUB.subt)};Typr.GSUB.subt=function(data,ltype,offset){var bin=Typr._bin,offset0=offset,tab={};if(ltype!=1&&ltype!=4&&ltype!=5)return null;tab.fmt=bin.readUshort(data,offset);offset+=2;var covOff=bin.readUshort(data,offset);offset+=2;tab.coverage=Typr._lctf.readCoverage(data,covOff+offset0);if(false){}else if(ltype==1){if(tab.fmt==1){tab.delta=bin.readShort(data,offset);offset+=2}else if(tab.fmt==2){var cnt=bin.readUshort(data,offset);offset+=2;tab.newg=bin.readUshorts(data,offset,cnt);offset+=tab.newg.length*2}}else if(ltype==4){tab.vals=[];var cnt=bin.readUshort(data,offset);offset+=2;for(var i=0;i<cnt;i++){var loff=bin.readUshort(data,offset);offset+=2;tab.vals.push(Typr.GSUB.readLigatureSet(data,offset0+loff))}}else if(ltype==5){if(tab.fmt==2){var cDefOffset=bin.readUshort(data,offset);offset+=2;tab.cDef=Typr._lctf.readClassDef(data,offset0+cDefOffset);tab.scset=[];var subClassSetCount=bin.readUshort(data,offset);offset+=2;for(var i=0;i<subClassSetCount;i++){var scsOff=bin.readUshort(data,offset);offset+=2;tab.scset.push(scsOff==0?null:Typr.GSUB.readSubClassSet(data,offset0+scsOff))}}else console.log(\"unknown table format\",tab.fmt)}return tab};Typr.GSUB.readSubClassSet=function(data,offset){var rUs=Typr._bin.readUshort,offset0=offset,lset=[];var cnt=rUs(data,offset);offset+=2;for(var i=0;i<cnt;i++){var loff=rUs(data,offset);offset+=2;lset.push(Typr.GSUB.readSubClassRule(data,offset0+loff))}return lset};Typr.GSUB.readSubClassRule=function(data,offset){var rUs=Typr._bin.readUshort,offset0=offset,rule={};var gcount=rUs(data,offset);offset+=2;var scount=rUs(data,offset);offset+=2;rule.input=[];for(var i=0;i<gcount-1;i++){rule.input.push(rUs(data,offset));offset+=2}rule.substLookupRecords=Typr.GSUB.readSubstLookupRecords(data,offset,scount);return rule};Typr.GSUB.readSubstLookupRecords=function(data,offset,cnt){var rUs=Typr._bin.readUshort;var out=[];for(var i=0;i<cnt;i++){out.push(rUs(data,offset),rUs(data,offset+2));offset+=4}return out};Typr.GSUB.readChainSubClassSet=function(data,offset){var bin=Typr._bin,offset0=offset,lset=[];var cnt=bin.readUshort(data,offset);offset+=2;for(var i=0;i<cnt;i++){var loff=bin.readUshort(data,offset);offset+=2;lset.push(Typr.GSUB.readChainSubClassRule(data,offset0+loff))}return lset};Typr.GSUB.readChainSubClassRule=function(data,offset){var bin=Typr._bin,offset0=offset,rule={};var pps=[\"backtrack\",\"input\",\"lookahead\"];for(var pi=0;pi<pps.length;pi++){var cnt=bin.readUshort(data,offset);offset+=2;if(pi==1)cnt--;rule[pps[pi]]=bin.readUshorts(data,offset,cnt);offset+=rule[pps[pi]].length*2}var cnt=bin.readUshort(data,offset);offset+=2;rule.subst=bin.readUshorts(data,offset,cnt*2);offset+=rule.subst.length*2;return rule};Typr.GSUB.readLigatureSet=function(data,offset){var bin=Typr._bin,offset0=offset,lset=[];var lcnt=bin.readUshort(data,offset);offset+=2;for(var j=0;j<lcnt;j++){var loff=bin.readUshort(data,offset);offset+=2;lset.push(Typr.GSUB.readLigature(data,offset0+loff))}return lset};Typr.GSUB.readLigature=function(data,offset){var bin=Typr._bin,lig={chain:[]};lig.nglyph=bin.readUshort(data,offset);offset+=2;var ccnt=bin.readUshort(data,offset);offset+=2;for(var k=0;k<ccnt-1;k++){lig.chain.push(bin.readUshort(data,offset));offset+=2}return lig};Typr.head={};Typr.head.parse=function(data,offset,length){var bin=Typr._bin;var obj={};var tableVersion=bin.readFixed(data,offset);offset+=4;obj.fontRevision=bin.readFixed(data,offset);offset+=4;var checkSumAdjustment=bin.readUint(data,offset);offset+=4;var magicNumber=bin.readUint(data,offset);offset+=4;obj.flags=bin.readUshort(data,offset);offset+=2;obj.unitsPerEm=bin.readUshort(data,offset);offset+=2;obj.created=bin.readUint64(data,offset);offset+=8;obj.modified=bin.readUint64(data,offset);offset+=8;obj.xMin=bin.readShort(data,offset);offset+=2;obj.yMin=bin.readShort(data,offset);offset+=2;obj.xMax=bin.readShort(data,offset);offset+=2;obj.yMax=bin.readShort(data,offset);offset+=2;obj.macStyle=bin.readUshort(data,offset);offset+=2;obj.lowestRecPPEM=bin.readUshort(data,offset);offset+=2;obj.fontDirectionHint=bin.readShort(data,offset);offset+=2;obj.indexToLocFormat=bin.readShort(data,offset);offset+=2;obj.glyphDataFormat=bin.readShort(data,offset);offset+=2;return obj};Typr.hhea={};Typr.hhea.parse=function(data,offset,length){var bin=Typr._bin;var obj={};var tableVersion=bin.readFixed(data,offset);offset+=4;obj.ascender=bin.readShort(data,offset);offset+=2;obj.descender=bin.readShort(data,offset);offset+=2;obj.lineGap=bin.readShort(data,offset);offset+=2;obj.advanceWidthMax=bin.readUshort(data,offset);offset+=2;obj.minLeftSideBearing=bin.readShort(data,offset);offset+=2;obj.minRightSideBearing=bin.readShort(data,offset);offset+=2;obj.xMaxExtent=bin.readShort(data,offset);offset+=2;obj.caretSlopeRise=bin.readShort(data,offset);offset+=2;obj.caretSlopeRun=bin.readShort(data,offset);offset+=2;obj.caretOffset=bin.readShort(data,offset);offset+=2;offset+=4*2;obj.metricDataFormat=bin.readShort(data,offset);offset+=2;obj.numberOfHMetrics=bin.readUshort(data,offset);offset+=2;return obj};Typr.hmtx={};Typr.hmtx.parse=function(data,offset,length,font){var bin=Typr._bin;var obj={};obj.aWidth=[];obj.lsBearing=[];var aw=0,lsb=0;for(var i=0;i<font.maxp.numGlyphs;i++){if(i<font.hhea.numberOfHMetrics){aw=bin.readUshort(data,offset);offset+=2;lsb=bin.readShort(data,offset);offset+=2}obj.aWidth.push(aw);obj.lsBearing.push(lsb)}return obj};Typr.kern={};Typr.kern.parse=function(data,offset,length,font){var bin=Typr._bin;var version=bin.readUshort(data,offset);offset+=2;if(version==1)return Typr.kern.parseV1(data,offset-2,length,font);var nTables=bin.readUshort(data,offset);offset+=2;var map={glyph1:[],rval:[]};for(var i=0;i<nTables;i++){offset+=2;var length=bin.readUshort(data,offset);offset+=2;var coverage=bin.readUshort(data,offset);offset+=2;var format=coverage>>>8;format&=15;if(format==0)offset=Typr.kern.readFormat0(data,offset,map);else throw\"unknown kern table format: \"+format}return map};Typr.kern.parseV1=function(data,offset,length,font){var bin=Typr._bin;var version=bin.readFixed(data,offset);offset+=4;var nTables=bin.readUint(data,offset);offset+=4;var map={glyph1:[],rval:[]};for(var i=0;i<nTables;i++){var length=bin.readUint(data,offset);offset+=4;var coverage=bin.readUshort(data,offset);offset+=2;var tupleIndex=bin.readUshort(data,offset);offset+=2;var format=coverage>>>8;format&=15;if(format==0)offset=Typr.kern.readFormat0(data,offset,map);else throw\"unknown kern table format: \"+format}return map};Typr.kern.readFormat0=function(data,offset,map){var bin=Typr._bin;var pleft=-1;var nPairs=bin.readUshort(data,offset);offset+=2;var searchRange=bin.readUshort(data,offset);offset+=2;var entrySelector=bin.readUshort(data,offset);offset+=2;var rangeShift=bin.readUshort(data,offset);offset+=2;for(var j=0;j<nPairs;j++){var left=bin.readUshort(data,offset);offset+=2;var right=bin.readUshort(data,offset);offset+=2;var value=bin.readShort(data,offset);offset+=2;if(left!=pleft){map.glyph1.push(left);map.rval.push({glyph2:[],vals:[]})}var rval=map.rval[map.rval.length-1];rval.glyph2.push(right);rval.vals.push(value);pleft=left}return offset};Typr.loca={};Typr.loca.parse=function(data,offset,length,font){var bin=Typr._bin;var obj=[];var ver=font.head.indexToLocFormat;var len=font.maxp.numGlyphs+1;if(ver==0)for(var i=0;i<len;i++)obj.push(bin.readUshort(data,offset+(i<<1))<<1);if(ver==1)for(var i=0;i<len;i++)obj.push(bin.readUint(data,offset+(i<<2)));return obj};Typr.maxp={};Typr.maxp.parse=function(data,offset,length){var bin=Typr._bin;var obj={};var ver=bin.readUint(data,offset);offset+=4;obj.numGlyphs=bin.readUshort(data,offset);offset+=2;if(ver==65536){obj.maxPoints=bin.readUshort(data,offset);offset+=2;obj.maxContours=bin.readUshort(data,offset);offset+=2;obj.maxCompositePoints=bin.readUshort(data,offset);offset+=2;obj.maxCompositeContours=bin.readUshort(data,offset);offset+=2;obj.maxZones=bin.readUshort(data,offset);offset+=2;obj.maxTwilightPoints=bin.readUshort(data,offset);offset+=2;obj.maxStorage=bin.readUshort(data,offset);offset+=2;obj.maxFunctionDefs=bin.readUshort(data,offset);offset+=2;obj.maxInstructionDefs=bin.readUshort(data,offset);offset+=2;obj.maxStackElements=bin.readUshort(data,offset);offset+=2;obj.maxSizeOfInstructions=bin.readUshort(data,offset);offset+=2;obj.maxComponentElements=bin.readUshort(data,offset);offset+=2;obj.maxComponentDepth=bin.readUshort(data,offset);offset+=2}return obj};Typr.name={};Typr.name.parse=function(data,offset,length){var bin=Typr._bin;var obj={};var format=bin.readUshort(data,offset);offset+=2;var count=bin.readUshort(data,offset);offset+=2;var stringOffset=bin.readUshort(data,offset);offset+=2;var offset0=offset;for(var i=0;i<count;i++){var platformID=bin.readUshort(data,offset);offset+=2;var encodingID=bin.readUshort(data,offset);offset+=2;var languageID=bin.readUshort(data,offset);offset+=2;var nameID=bin.readUshort(data,offset);offset+=2;var length=bin.readUshort(data,offset);offset+=2;var noffset=bin.readUshort(data,offset);offset+=2;var plat=\"p\"+platformID;if(obj[plat]==null)obj[plat]={};var names=[\"copyright\",\"fontFamily\",\"fontSubfamily\",\"ID\",\"fullName\",\"version\",\"postScriptName\",\"trademark\",\"manufacturer\",\"designer\",\"description\",\"urlVendor\",\"urlDesigner\",\"licence\",\"licenceURL\",\"---\",\"typoFamilyName\",\"typoSubfamilyName\",\"compatibleFull\",\"sampleText\",\"postScriptCID\",\"wwsFamilyName\",\"wwsSubfamilyName\",\"lightPalette\",\"darkPalette\"];var cname=names[nameID];var soff=offset0+count*12+noffset;var str;if(false){}else if(platformID==0)str=bin.readUnicode(data,soff,length/2);else if(platformID==3&&encodingID==0)str=bin.readUnicode(data,soff,length/2);else if(encodingID==0)str=bin.readASCII(data,soff,length);else if(encodingID==1)str=bin.readUnicode(data,soff,length/2);else if(encodingID==3)str=bin.readUnicode(data,soff,length/2);else if(platformID==1){str=bin.readASCII(data,soff,length);console.log(\"reading unknown MAC encoding \"+encodingID+\" as ASCII\")}else throw\"unknown encoding \"+encodingID+\", platformID: \"+platformID;obj[plat][cname]=str;obj[plat]._lang=languageID}for(var p in obj)if(obj[p].postScriptName!=null&&obj[p]._lang==1033)return obj[p];for(var p in obj)if(obj[p].postScriptName!=null&&obj[p]._lang==3084)return obj[p];for(var p in obj)if(obj[p].postScriptName!=null)return obj[p];var tname;for(var p in obj){tname=p;break}console.log(\"returning name table with languageID \"+obj[tname]._lang);return obj[tname]};Typr[\"OS/2\"]={};Typr[\"OS/2\"].parse=function(data,offset,length){var bin=Typr._bin;var ver=bin.readUshort(data,offset);offset+=2;var obj={};if(ver==0)Typr[\"OS/2\"].version0(data,offset,obj);else if(ver==1)Typr[\"OS/2\"].version1(data,offset,obj);else if(ver==2||ver==3||ver==4)Typr[\"OS/2\"].version2(data,offset,obj);else if(ver==5)Typr[\"OS/2\"].version5(data,offset,obj);else throw\"unknown OS/2 table version: \"+ver;return obj};Typr[\"OS/2\"].version0=function(data,offset,obj){var bin=Typr._bin;obj.xAvgCharWidth=bin.readShort(data,offset);offset+=2;obj.usWeightClass=bin.readUshort(data,offset);offset+=2;obj.usWidthClass=bin.readUshort(data,offset);offset+=2;obj.fsType=bin.readUshort(data,offset);offset+=2;obj.ySubscriptXSize=bin.readShort(data,offset);offset+=2;obj.ySubscriptYSize=bin.readShort(data,offset);offset+=2;obj.ySubscriptXOffset=bin.readShort(data,offset);offset+=2;obj.ySubscriptYOffset=bin.readShort(data,offset);offset+=2;obj.ySuperscriptXSize=bin.readShort(data,offset);offset+=2;obj.ySuperscriptYSize=bin.readShort(data,offset);offset+=2;obj.ySuperscriptXOffset=bin.readShort(data,offset);offset+=2;obj.ySuperscriptYOffset=bin.readShort(data,offset);offset+=2;obj.yStrikeoutSize=bin.readShort(data,offset);offset+=2;obj.yStrikeoutPosition=bin.readShort(data,offset);offset+=2;obj.sFamilyClass=bin.readShort(data,offset);offset+=2;obj.panose=bin.readBytes(data,offset,10);offset+=10;obj.ulUnicodeRange1=bin.readUint(data,offset);offset+=4;obj.ulUnicodeRange2=bin.readUint(data,offset);offset+=4;obj.ulUnicodeRange3=bin.readUint(data,offset);offset+=4;obj.ulUnicodeRange4=bin.readUint(data,offset);offset+=4;obj.achVendID=[bin.readInt8(data,offset),bin.readInt8(data,offset+1),bin.readInt8(data,offset+2),bin.readInt8(data,offset+3)];offset+=4;obj.fsSelection=bin.readUshort(data,offset);offset+=2;obj.usFirstCharIndex=bin.readUshort(data,offset);offset+=2;obj.usLastCharIndex=bin.readUshort(data,offset);offset+=2;obj.sTypoAscender=bin.readShort(data,offset);offset+=2;obj.sTypoDescender=bin.readShort(data,offset);offset+=2;obj.sTypoLineGap=bin.readShort(data,offset);offset+=2;obj.usWinAscent=bin.readUshort(data,offset);offset+=2;obj.usWinDescent=bin.readUshort(data,offset);offset+=2;return offset};Typr[\"OS/2\"].version1=function(data,offset,obj){var bin=Typr._bin;offset=Typr[\"OS/2\"].version0(data,offset,obj);obj.ulCodePageRange1=bin.readUint(data,offset);offset+=4;obj.ulCodePageRange2=bin.readUint(data,offset);offset+=4;return offset};Typr[\"OS/2\"].version2=function(data,offset,obj){var bin=Typr._bin;offset=Typr[\"OS/2\"].version1(data,offset,obj);obj.sxHeight=bin.readShort(data,offset);offset+=2;obj.sCapHeight=bin.readShort(data,offset);offset+=2;obj.usDefault=bin.readUshort(data,offset);offset+=2;obj.usBreak=bin.readUshort(data,offset);offset+=2;obj.usMaxContext=bin.readUshort(data,offset);offset+=2;return offset};Typr[\"OS/2\"].version5=function(data,offset,obj){var bin=Typr._bin;offset=Typr[\"OS/2\"].version2(data,offset,obj);obj.usLowerOpticalPointSize=bin.readUshort(data,offset);offset+=2;obj.usUpperOpticalPointSize=bin.readUshort(data,offset);offset+=2;return offset};Typr.post={};Typr.post.parse=function(data,offset,length){var bin=Typr._bin;var obj={};obj.version=bin.readFixed(data,offset);offset+=4;obj.italicAngle=bin.readFixed(data,offset);offset+=4;obj.underlinePosition=bin.readShort(data,offset);offset+=2;obj.underlineThickness=bin.readShort(data,offset);offset+=2;return obj};Typr.SVG={};Typr.SVG.parse=function(data,offset,length){var bin=Typr._bin;var obj={entries:[]};var offset0=offset;var tableVersion=bin.readUshort(data,offset);offset+=2;var svgDocIndexOffset=bin.readUint(data,offset);offset+=4;var reserved=bin.readUint(data,offset);offset+=4;offset=svgDocIndexOffset+offset0;var numEntries=bin.readUshort(data,offset);offset+=2;for(var i=0;i<numEntries;i++){var startGlyphID=bin.readUshort(data,offset);offset+=2;var endGlyphID=bin.readUshort(data,offset);offset+=2;var svgDocOffset=bin.readUint(data,offset);offset+=4;var svgDocLength=bin.readUint(data,offset);offset+=4;var sbuf=new Uint8Array(data.buffer,offset0+svgDocOffset+svgDocIndexOffset,svgDocLength);var svg=bin.readUTF8(sbuf,0,sbuf.length);for(var f=startGlyphID;f<=endGlyphID;f++){obj.entries[f]=svg}}return obj};Typr.SVG.toPath=function(str){var pth={cmds:[],crds:[]};if(str==null)return pth;var prsr=new DOMParser;var doc=prsr[\"parseFromString\"](str,\"image/svg+xml\");var svg=doc.firstChild;while(svg.tagName!=\"svg\")svg=svg.nextSibling;var vb=svg.getAttribute(\"viewBox\");if(vb)vb=vb.trim().split(\" \").map(parseFloat);else vb=[0,0,1e3,1e3];Typr.SVG._toPath(svg.children,pth);for(var i=0;i<pth.crds.length;i+=2){var x=pth.crds[i],y=pth.crds[i+1];x-=vb[0];y-=vb[1];y=-y;pth.crds[i]=x;pth.crds[i+1]=y}return pth};Typr.SVG._toPath=function(nds,pth,fill){for(var ni=0;ni<nds.length;ni++){var nd=nds[ni],tn=nd.tagName;var cfl=nd.getAttribute(\"fill\");if(cfl==null)cfl=fill;if(tn==\"g\")Typr.SVG._toPath(nd.children,pth,cfl);else if(tn==\"path\"){pth.cmds.push(cfl?cfl:\"#000000\");var d=nd.getAttribute(\"d\");var toks=Typr.SVG._tokens(d);Typr.SVG._toksToPath(toks,pth);pth.cmds.push(\"X\")}else if(tn==\"defs\"){}else console.log(tn,nd)}};Typr.SVG._tokens=function(d){var ts=[],off=0,rn=false,cn=\"\";while(off<d.length){var cc=d.charCodeAt(off),ch=d.charAt(off);off++;var isNum=48<=cc&&cc<=57||ch==\".\"||ch==\"-\";if(rn){if(ch==\"-\"){ts.push(parseFloat(cn));cn=ch}else if(isNum)cn+=ch;else{ts.push(parseFloat(cn));if(ch!=\",\"&&ch!=\" \")ts.push(ch);rn=false}}else{if(isNum){cn=ch;rn=true}else if(ch!=\",\"&&ch!=\" \")ts.push(ch)}}if(rn)ts.push(parseFloat(cn));return ts};Typr.SVG._toksToPath=function(ts,pth){var i=0,x=0,y=0,ox=0,oy=0;var pc={M:2,L:2,H:1,V:1,S:4,C:6};var cmds=pth.cmds,crds=pth.crds;while(i<ts.length){var cmd=ts[i];i++;if(cmd==\"z\"){cmds.push(\"Z\");x=ox;y=oy}else{var cmu=cmd.toUpperCase();var ps=pc[cmu],reps=Typr.SVG._reps(ts,i,ps);for(var j=0;j<reps;j++){var xi=0,yi=0;if(cmd!=cmu){xi=x;yi=y}if(false){}else if(cmu==\"M\"){x=xi+ts[i++];y=yi+ts[i++];cmds.push(\"M\");crds.push(x,y);ox=x;oy=y}else if(cmu==\"L\"){x=xi+ts[i++];y=yi+ts[i++];cmds.push(\"L\");crds.push(x,y)}else if(cmu==\"H\"){x=xi+ts[i++];cmds.push(\"L\");crds.push(x,y)}else if(cmu==\"V\"){y=yi+ts[i++];cmds.push(\"L\");crds.push(x,y)}else if(cmu==\"C\"){var x1=xi+ts[i++],y1=yi+ts[i++],x2=xi+ts[i++],y2=yi+ts[i++],x3=xi+ts[i++],y3=yi+ts[i++];cmds.push(\"C\");crds.push(x1,y1,x2,y2,x3,y3);x=x3;y=y3}else if(cmu==\"S\"){var co=Math.max(crds.length-4,0);var x1=x+x-crds[co],y1=y+y-crds[co+1];var x2=xi+ts[i++],y2=yi+ts[i++],x3=xi+ts[i++],y3=yi+ts[i++];cmds.push(\"C\");crds.push(x1,y1,x2,y2,x3,y3);x=x3;y=y3}else console.log(\"Unknown SVG command \"+cmd)}}}};Typr.SVG._reps=function(ts,off,ps){var i=off;while(i<ts.length){if(typeof ts[i]==\"string\")break;i+=ps}return(i-off)/ps};if(Typr==null)Typr={};if(Typr.U==null)Typr.U={};Typr.U.codeToGlyph=function(font,code){var cmap=font.cmap;var tind=-1;if(cmap.p0e4!=null)tind=cmap.p0e4;else if(cmap.p3e1!=null)tind=cmap.p3e1;else if(cmap.p1e0!=null)tind=cmap.p1e0;if(tind==-1)throw\"no familiar platform and encoding!\";var tab=cmap.tables[tind];if(tab.format==0){if(code>=tab.map.length)return 0;return tab.map[code]}else if(tab.format==4){var sind=-1;for(var i=0;i<tab.endCount.length;i++)if(code<=tab.endCount[i]){sind=i;break}if(sind==-1)return 0;if(tab.startCount[sind]>code)return 0;var gli=0;if(tab.idRangeOffset[sind]!=0)gli=tab.glyphIdArray[code-tab.startCount[sind]+(tab.idRangeOffset[sind]>>1)-(tab.idRangeOffset.length-sind)];else gli=code+tab.idDelta[sind];return gli&65535}else if(tab.format==12){if(code>tab.groups[tab.groups.length-1][1])return 0;for(var i=0;i<tab.groups.length;i++){var grp=tab.groups[i];if(grp[0]<=code&&code<=grp[1])return grp[2]+(code-grp[0])}return 0}else throw\"unknown cmap table format \"+tab.format};Typr.U.glyphToPath=function(font,gid){var path={cmds:[],crds:[]};if(font.SVG&&font.SVG.entries[gid]){var p=font.SVG.entries[gid];if(p==null)return path;if(typeof p==\"string\"){p=Typr.SVG.toPath(p);font.SVG.entries[gid]=p}return p}else if(font.CFF){var state={x:0,y:0,stack:[],nStems:0,haveWidth:false,width:font.CFF.Private?font.CFF.Private.defaultWidthX:0,open:false};Typr.U._drawCFF(font.CFF.CharStrings[gid],state,font.CFF,path)}else if(font.glyf){Typr.U._drawGlyf(gid,font,path)}return path};Typr.U._drawGlyf=function(gid,font,path){var gl=font.glyf[gid];if(gl==null)gl=font.glyf[gid]=Typr.glyf._parseGlyf(font,gid);if(gl!=null){if(gl.noc>-1)Typr.U._simpleGlyph(gl,path);else Typr.U._compoGlyph(gl,font,path)}};Typr.U._simpleGlyph=function(gl,p){for(var c=0;c<gl.noc;c++){var i0=c==0?0:gl.endPts[c-1]+1;var il=gl.endPts[c];for(var i=i0;i<=il;i++){var pr=i==i0?il:i-1;var nx=i==il?i0:i+1;var onCurve=gl.flags[i]&1;var prOnCurve=gl.flags[pr]&1;var nxOnCurve=gl.flags[nx]&1;var x=gl.xs[i],y=gl.ys[i];if(i==i0){if(onCurve){if(prOnCurve)Typr.U.P.moveTo(p,gl.xs[pr],gl.ys[pr]);else{Typr.U.P.moveTo(p,x,y);continue}}else{if(prOnCurve)Typr.U.P.moveTo(p,gl.xs[pr],gl.ys[pr]);else Typr.U.P.moveTo(p,(gl.xs[pr]+x)/2,(gl.ys[pr]+y)/2)}}if(onCurve){if(prOnCurve)Typr.U.P.lineTo(p,x,y)}else{if(nxOnCurve)Typr.U.P.qcurveTo(p,x,y,gl.xs[nx],gl.ys[nx]);else Typr.U.P.qcurveTo(p,x,y,(x+gl.xs[nx])/2,(y+gl.ys[nx])/2)}}Typr.U.P.closePath(p)}};Typr.U._compoGlyph=function(gl,font,p){for(var j=0;j<gl.parts.length;j++){var path={cmds:[],crds:[]};var prt=gl.parts[j];Typr.U._drawGlyf(prt.glyphIndex,font,path);var m=prt.m;for(var i=0;i<path.crds.length;i+=2){var x=path.crds[i],y=path.crds[i+1];p.crds.push(x*m.a+y*m.b+m.tx);p.crds.push(x*m.c+y*m.d+m.ty)}for(var i=0;i<path.cmds.length;i++)p.cmds.push(path.cmds[i])}};Typr.U._getGlyphClass=function(g,cd){var intr=Typr._lctf.getInterval(cd,g);return intr==-1?0:cd[intr+2]};Typr.U.getPairAdjustment=function(font,g1,g2){if(font.GPOS){var ltab=null;for(var i=0;i<font.GPOS.featureList.length;i++){var fl=font.GPOS.featureList[i];if(fl.tag==\"kern\")for(var j=0;j<fl.tab.length;j++)if(font.GPOS.lookupList[fl.tab[j]].ltype==2)ltab=font.GPOS.lookupList[fl.tab[j]]}if(ltab){var adjv=0;for(var i=0;i<ltab.tabs.length;i++){var tab=ltab.tabs[i];var ind=Typr._lctf.coverageIndex(tab.coverage,g1);if(ind==-1)continue;var adj;if(tab.format==1){var right=tab.pairsets[ind];for(var j=0;j<right.length;j++)if(right[j].gid2==g2)adj=right[j];if(adj==null)continue}else if(tab.format==2){var c1=Typr.U._getGlyphClass(g1,tab.classDef1);var c2=Typr.U._getGlyphClass(g2,tab.classDef2);var adj=tab.matrix[c1][c2]}return adj.val1[2]}}}if(font.kern){var ind1=font.kern.glyph1.indexOf(g1);if(ind1!=-1){var ind2=font.kern.rval[ind1].glyph2.indexOf(g2);if(ind2!=-1)return font.kern.rval[ind1].vals[ind2]}}return 0};Typr.U.stringToGlyphs=function(font,str){var gls=[];for(var i=0;i<str.length;i++){var cc=str.codePointAt(i);if(cc>65535)i++;gls.push(Typr.U.codeToGlyph(font,cc))}var gsub=font[\"GSUB\"];if(gsub==null)return gls;var llist=gsub.lookupList,flist=gsub.featureList;var wsep='\\n\\t\" ,.:;!?() ،';var R=\"آأؤإاةدذرزوٱٲٳٵٶٷڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙۀۃۄۅۆۇۈۉۊۋۍۏےۓەۮۯܐܕܖܗܘܙܞܨܪܬܯݍݙݚݛݫݬݱݳݴݸݹࡀࡆࡇࡉࡔࡧࡩࡪࢪࢫࢬࢮࢱࢲࢹૅેૉ૊૎૏ૐ૑૒૝ૡ૤૯஁ஃ஄அஉ஌எஏ஑னப஫஬\";var L=\"ꡲ્૗\";for(var ci=0;ci<gls.length;ci++){var gl=gls[ci];var slft=ci==0||wsep.indexOf(str[ci-1])!=-1;var srgt=ci==gls.length-1||wsep.indexOf(str[ci+1])!=-1;if(!slft&&R.indexOf(str[ci-1])!=-1)slft=true;if(!srgt&&R.indexOf(str[ci])!=-1)srgt=true;if(!srgt&&L.indexOf(str[ci+1])!=-1)srgt=true;if(!slft&&L.indexOf(str[ci])!=-1)slft=true;var feat=null;if(slft)feat=srgt?\"isol\":\"init\";else feat=srgt?\"fina\":\"medi\";for(var fi=0;fi<flist.length;fi++){if(flist[fi].tag!=feat)continue;for(var ti=0;ti<flist[fi].tab.length;ti++){var tab=llist[flist[fi].tab[ti]];if(tab.ltype!=1)continue;Typr.U._applyType1(gls,ci,tab)}}}var cligs=[\"rlig\",\"liga\",\"mset\"];for(var ci=0;ci<gls.length;ci++){var gl=gls[ci];var rlim=Math.min(3,gls.length-ci-1);for(var fi=0;fi<flist.length;fi++){var fl=flist[fi];if(cligs.indexOf(fl.tag)==-1)continue;for(var ti=0;ti<fl.tab.length;ti++){var tab=llist[fl.tab[ti]];for(var j=0;j<tab.tabs.length;j++){if(tab.tabs[j]==null)continue;var ind=Typr._lctf.coverageIndex(tab.tabs[j].coverage,gl);if(ind==-1)continue;if(tab.ltype==4){var vals=tab.tabs[j].vals[ind];for(var k=0;k<vals.length;k++){var lig=vals[k],rl=lig.chain.length;if(rl>rlim)continue;var good=true;for(var l=0;l<rl;l++)if(lig.chain[l]!=gls[ci+(1+l)])good=false;if(!good)continue;gls[ci]=lig.nglyph;for(var l=0;l<rl;l++)gls[ci+l+1]=-1}}else if(tab.ltype==5){var ltab=tab.tabs[j];if(ltab.fmt!=2)continue;var cind=Typr._lctf.getInterval(ltab.cDef,gl);var cls=ltab.cDef[cind+2],scs=ltab.scset[cls];for(var i=0;i<scs.length;i++){var sc=scs[i],inp=sc.input;if(inp.length>rlim)continue;var good=true;for(var l=0;l<inp.length;l++){var cind2=Typr._lctf.getInterval(ltab.cDef,gls[ci+1+l]);if(cind==-1&&ltab.cDef[cind2+2]!=inp[l]){good=false;break}}if(!good)continue;var lrs=sc.substLookupRecords;for(var k=0;k<lrs.length;k+=2){var gi=lrs[k],tabi=lrs[k+1]}}}}}}}return gls};Typr.U._applyType1=function(gls,ci,tab){var gl=gls[ci];for(var j=0;j<tab.tabs.length;j++){var ttab=tab.tabs[j];var ind=Typr._lctf.coverageIndex(ttab.coverage,gl);if(ind==-1)continue;if(ttab.fmt==1)gls[ci]=gls[ci]+ttab.delta;else gls[ci]=ttab.newg[ind]}};Typr.U.glyphsToPath=function(font,gls,clr){var tpath={cmds:[],crds:[]};var x=0;for(var i=0;i<gls.length;i++){var gid=gls[i];if(gid==-1)continue;var gid2=i<gls.length-1&&gls[i+1]!=-1?gls[i+1]:0;var path=Typr.U.glyphToPath(font,gid);for(var j=0;j<path.crds.length;j+=2){tpath.crds.push(path.crds[j]+x);tpath.crds.push(path.crds[j+1])}if(clr)tpath.cmds.push(clr);for(var j=0;j<path.cmds.length;j++)tpath.cmds.push(path.cmds[j]);if(clr)tpath.cmds.push(\"X\");x+=font.hmtx.aWidth[gid];if(i<gls.length-1)x+=Typr.U.getPairAdjustment(font,gid,gid2)}return tpath};Typr.U.pathToSVG=function(path,prec){if(prec==null)prec=5;var out=[],co=0,lmap={M:2,L:2,Q:4,C:6};for(var i=0;i<path.cmds.length;i++){var cmd=path.cmds[i],cn=co+(lmap[cmd]?lmap[cmd]:0);out.push(cmd);while(co<cn){var c=path.crds[co++];out.push(parseFloat(c.toFixed(prec))+(co==cn?\"\":\" \"))}}return out.join(\"\")};Typr.U.pathToContext=function(path,ctx){var c=0,crds=path.crds;for(var j=0;j<path.cmds.length;j++){var cmd=path.cmds[j];if(cmd==\"M\"){ctx.moveTo(crds[c],crds[c+1]);c+=2}else if(cmd==\"L\"){ctx.lineTo(crds[c],crds[c+1]);c+=2}else if(cmd==\"C\"){ctx.bezierCurveTo(crds[c],crds[c+1],crds[c+2],crds[c+3],crds[c+4],crds[c+5]);c+=6}else if(cmd==\"Q\"){ctx.quadraticCurveTo(crds[c],crds[c+1],crds[c+2],crds[c+3]);c+=4}else if(cmd.charAt(0)==\"#\"){ctx.beginPath();ctx.fillStyle=cmd}else if(cmd==\"Z\"){ctx.closePath()}else if(cmd==\"X\"){ctx.fill()}}};Typr.U.P={};Typr.U.P.moveTo=function(p,x,y){p.cmds.push(\"M\");p.crds.push(x,y)};Typr.U.P.lineTo=function(p,x,y){p.cmds.push(\"L\");p.crds.push(x,y)};Typr.U.P.curveTo=function(p,a,b,c,d,e,f){p.cmds.push(\"C\");p.crds.push(a,b,c,d,e,f)};Typr.U.P.qcurveTo=function(p,a,b,c,d){p.cmds.push(\"Q\");p.crds.push(a,b,c,d)};Typr.U.P.closePath=function(p){p.cmds.push(\"Z\")};Typr.U._drawCFF=function(cmds,state,font,p){var stack=state.stack;var nStems=state.nStems,haveWidth=state.haveWidth,width=state.width,open=state.open;var i=0;var x=state.x,y=state.y,c1x=0,c1y=0,c2x=0,c2y=0,c3x=0,c3y=0,c4x=0,c4y=0,jpx=0,jpy=0;var o={val:0,size:0};while(i<cmds.length){Typr.CFF.getCharString(cmds,i,o);var v=o.val;i+=o.size;if(false){}else if(v==\"o1\"||v==\"o18\"){var hasWidthArg;hasWidthArg=stack.length%2!==0;if(hasWidthArg&&!haveWidth){width=stack.shift()+font.Private.nominalWidthX}nStems+=stack.length>>1;stack.length=0;haveWidth=true}else if(v==\"o3\"||v==\"o23\"){var hasWidthArg;hasWidthArg=stack.length%2!==0;if(hasWidthArg&&!haveWidth){width=stack.shift()+font.Private.nominalWidthX}nStems+=stack.length>>1;stack.length=0;haveWidth=true}else if(v==\"o4\"){if(stack.length>1&&!haveWidth){width=stack.shift()+font.Private.nominalWidthX;haveWidth=true}if(open)Typr.U.P.closePath(p);y+=stack.pop();Typr.U.P.moveTo(p,x,y);open=true}else if(v==\"o5\"){while(stack.length>0){x+=stack.shift();y+=stack.shift();Typr.U.P.lineTo(p,x,y)}}else if(v==\"o6\"||v==\"o7\"){var count=stack.length;var isX=v==\"o6\";for(var j=0;j<count;j++){var sval=stack.shift();if(isX)x+=sval;else y+=sval;isX=!isX;Typr.U.P.lineTo(p,x,y)}}else if(v==\"o8\"||v==\"o24\"){var count=stack.length;var index=0;while(index+6<=count){c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y+stack.shift();Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,x,y);index+=6}if(v==\"o24\"){x+=stack.shift();y+=stack.shift();Typr.U.P.lineTo(p,x,y)}}else if(v==\"o11\")break;else if(v==\"o1234\"||v==\"o1235\"||v==\"o1236\"||v==\"o1237\"){if(v==\"o1234\"){c1x=x+stack.shift();c1y=y;c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y;c3x=jpx+stack.shift();c3y=c2y;c4x=c3x+stack.shift();c4y=y;x=c4x+stack.shift();Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,jpx,jpy);Typr.U.P.curveTo(p,c3x,c3y,c4x,c4y,x,y)}if(v==\"o1235\"){c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y+stack.shift();c3x=jpx+stack.shift();c3y=jpy+stack.shift();c4x=c3x+stack.shift();c4y=c3y+stack.shift();x=c4x+stack.shift();y=c4y+stack.shift();stack.shift();Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,jpx,jpy);Typr.U.P.curveTo(p,c3x,c3y,c4x,c4y,x,y)}if(v==\"o1236\"){c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y;c3x=jpx+stack.shift();c3y=c2y;c4x=c3x+stack.shift();c4y=c3y+stack.shift();x=c4x+stack.shift();Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,jpx,jpy);Typr.U.P.curveTo(p,c3x,c3y,c4x,c4y,x,y)}if(v==\"o1237\"){c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();jpx=c2x+stack.shift();jpy=c2y+stack.shift();c3x=jpx+stack.shift();c3y=jpy+stack.shift();c4x=c3x+stack.shift();c4y=c3y+stack.shift();if(Math.abs(c4x-x)>Math.abs(c4y-y)){x=c4x+stack.shift()}else{y=c4y+stack.shift()}Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,jpx,jpy);Typr.U.P.curveTo(p,c3x,c3y,c4x,c4y,x,y)}}else if(v==\"o14\"){if(stack.length>0&&!haveWidth){width=stack.shift()+font.nominalWidthX;haveWidth=true}if(stack.length==4){var asb=0;var adx=stack.shift();var ady=stack.shift();var bchar=stack.shift();var achar=stack.shift();var bind=Typr.CFF.glyphBySE(font,bchar);var aind=Typr.CFF.glyphBySE(font,achar);Typr.U._drawCFF(font.CharStrings[bind],state,font,p);state.x=adx;state.y=ady;Typr.U._drawCFF(font.CharStrings[aind],state,font,p)}if(open){Typr.U.P.closePath(p);open=false}}else if(v==\"o19\"||v==\"o20\"){var hasWidthArg;hasWidthArg=stack.length%2!==0;if(hasWidthArg&&!haveWidth){width=stack.shift()+font.Private.nominalWidthX}nStems+=stack.length>>1;stack.length=0;haveWidth=true;i+=nStems+7>>3}else if(v==\"o21\"){if(stack.length>2&&!haveWidth){width=stack.shift()+font.Private.nominalWidthX;haveWidth=true}y+=stack.pop();x+=stack.pop();if(open)Typr.U.P.closePath(p);Typr.U.P.moveTo(p,x,y);open=true}else if(v==\"o22\"){if(stack.length>1&&!haveWidth){width=stack.shift()+font.Private.nominalWidthX;haveWidth=true}x+=stack.pop();if(open)Typr.U.P.closePath(p);Typr.U.P.moveTo(p,x,y);open=true}else if(v==\"o25\"){while(stack.length>6){x+=stack.shift();y+=stack.shift();Typr.U.P.lineTo(p,x,y)}c1x=x+stack.shift();c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y+stack.shift();Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,x,y)}else if(v==\"o26\"){if(stack.length%2){x+=stack.shift()}while(stack.length>0){c1x=x;c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x;y=c2y+stack.shift();Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,x,y)}}else if(v==\"o27\"){if(stack.length%2){y+=stack.shift()}while(stack.length>0){c1x=x+stack.shift();c1y=y;c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();y=c2y;Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,x,y)}}else if(v==\"o10\"||v==\"o29\"){var obj=v==\"o10\"?font.Private:font;if(stack.length==0){console.log(\"error: empty stack\")}else{var ind=stack.pop();var subr=obj.Subrs[ind+obj.Bias];state.x=x;state.y=y;state.nStems=nStems;state.haveWidth=haveWidth;state.width=width;state.open=open;Typr.U._drawCFF(subr,state,font,p);x=state.x;y=state.y;nStems=state.nStems;haveWidth=state.haveWidth;width=state.width;open=state.open}}else if(v==\"o30\"||v==\"o31\"){var count,count1=stack.length;var index=0;var alternate=v==\"o31\";count=count1&~2;index+=count1-count;while(index<count){if(alternate){c1x=x+stack.shift();c1y=y;c2x=c1x+stack.shift();c2y=c1y+stack.shift();y=c2y+stack.shift();if(count-index==5){x=c2x+stack.shift();index++}else x=c2x;alternate=false}else{c1x=x;c1y=y+stack.shift();c2x=c1x+stack.shift();c2y=c1y+stack.shift();x=c2x+stack.shift();if(count-index==5){y=c2y+stack.shift();index++}else y=c2y;alternate=true}Typr.U.P.curveTo(p,c1x,c1y,c2x,c2y,x,y);index+=4}}else if((v+\"\").charAt(0)==\"o\"){console.log(\"Unknown operation: \"+v,cmds);throw v}else stack.push(v)}state.x=x;state.y=y;state.nStems=nStems;state.haveWidth=haveWidth;state.width=width;state.open=open};module.exports=Typr;","import Typr from 'typr.js';\n\nexport type FontPathCommandType = 'M' | 'L' | 'Q' | 'C' | 'Z';\n\nexport interface FontPathCommand {\n type: FontPathCommandType;\n values: number[];\n}\n\nexport interface FontPath {\n commands: FontPathCommand[];\n}\n\nexport interface FontAdapterGlyph {\n id: number;\n advanceWidth: number;\n}\n\nexport interface FontAdapterMetrics {\n ascent: number;\n descent: number;\n underlinePosition: number;\n underlineThickness: number;\n strikePosition: number;\n}\n\nexport interface FontAdapterFont {\n unitsPerEm: number;\n metrics: FontAdapterMetrics;\n stringToGlyphs(text: string): FontAdapterGlyph[];\n getKerningValue(left: FontAdapterGlyph, right: FontAdapterGlyph): number;\n getGlyphPath(glyph: FontAdapterGlyph, fontSize: number): FontPath;\n}\n\ntype TyprFont = {\n head?: { unitsPerEm?: number };\n hmtx?: { aWidth?: number[] };\n hhea?: { ascender?: number; descender?: number };\n post?: { underlinePosition?: number; underlineThickness?: number };\n 'OS/2'?: { yStrikeoutPosition?: number };\n};\n\ntype TyprPath = {\n cmds: string[];\n crds: number[];\n};\n\nconst fontCache = new Map<string, Promise<FontAdapterFont>>();\n\nfunction scaleTyprPath(path: TyprPath, scale: number): FontPath {\n const commands: FontPathCommand[] = [];\n let coordIndex = 0;\n\n for (const cmd of path.cmds) {\n if (cmd === '#000000' || cmd === 'X') {\n continue;\n }\n\n const count = cmd === 'M' || cmd === 'L' ? 2 : cmd === 'Q' ? 4 : cmd === 'C' ? 6 : 0;\n\n const values: number[] = [];\n\n for (let i = 0; i < count; i++) {\n const coordinate = (path.crds[coordIndex + i] ?? 0) * scale;\n values.push(i % 2 === 0 ? coordinate : -coordinate);\n }\n\n coordIndex += count;\n\n if (cmd === 'M' || cmd === 'L' || cmd === 'Q' || cmd === 'C' || cmd === 'Z') {\n commands.push({\n type: cmd,\n values,\n });\n }\n }\n\n return { commands };\n}\n\nfunction createFontAdapter(rawFont: TyprFont): FontAdapterFont {\n const unitsPerEm = rawFont.head?.unitsPerEm;\n\n if (!unitsPerEm) {\n throw new Error('Font is missing head.unitsPerEm');\n }\n\n return {\n unitsPerEm,\n metrics: {\n ascent: rawFont.hhea?.ascender ?? unitsPerEm * 0.8,\n descent: Math.abs(rawFont.hhea?.descender ?? unitsPerEm * 0.2),\n underlinePosition: Math.abs(rawFont.post?.underlinePosition ?? unitsPerEm * 0.08),\n underlineThickness: Math.abs(rawFont.post?.underlineThickness ?? unitsPerEm * 0.05),\n strikePosition: rawFont['OS/2']?.yStrikeoutPosition ?? unitsPerEm * 0.3,\n },\n stringToGlyphs(text: string): FontAdapterGlyph[] {\n const glyphIds = (Typr.U.stringToGlyphs(rawFont, text) as number[]).filter((gid) => gid >= 0);\n\n return glyphIds.map((id) => ({\n id,\n advanceWidth: rawFont.hmtx?.aWidth?.[id] ?? 0,\n }));\n },\n getKerningValue(left: FontAdapterGlyph, right: FontAdapterGlyph): number {\n return (Typr.U.getPairAdjustment(rawFont, left.id, right.id) as number) ?? 0;\n },\n getGlyphPath(glyph: FontAdapterGlyph, fontSize: number): FontPath {\n const rawPath = Typr.U.glyphToPath(rawFont, glyph.id) as TyprPath;\n return scaleTyprPath(rawPath, fontSize / unitsPerEm);\n },\n };\n}\n\nexport async function loadFont(fontUrl: string): Promise<FontAdapterFont> {\n const cached = fontCache.get(fontUrl);\n\n if (cached) {\n return cached;\n }\n\n const promise = (async () => {\n if (fontUrl.toLowerCase().endsWith('.woff2')) {\n throw new Error(\n `Font \"${fontUrl}\" is a WOFF2 file. Typr.js does not support WOFF2; use a .woff, .ttf, or .otf font instead.`,\n );\n }\n\n const response = await fetch(fontUrl);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch font \"${fontUrl}\". Status: ${response.status} ${response.statusText}`,\n );\n }\n\n const buffer = await response.arrayBuffer();\n\n try {\n const parsed = Typr.parse(buffer) as TyprFont | TyprFont[];\n const rawFont = Array.isArray(parsed) ? parsed[0] : parsed;\n\n if (!rawFont) {\n throw new Error('Typr.js returned an empty font result.');\n }\n\n return createFontAdapter(rawFont);\n } catch (error) {\n throw new Error(\n `Failed to parse font \"${fontUrl}\". Use a .woff, .ttf, or .otf file that Typr.js can read. ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n })();\n\n fontCache.set(fontUrl, promise);\n\n return promise;\n}\n","\nexport default function earcut(data, holeIndices, dim = 2) {\n\n const hasHoles = holeIndices && holeIndices.length;\n const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n let outerNode = linkedList(data, 0, outerLen, dim, true);\n const triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n let minX, minY, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = data[0];\n minY = data[1];\n let maxX = minX;\n let maxY = minY;\n\n for (let i = dim; i < outerLen; i += dim) {\n const x = data[i];\n const y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n let last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (let i = start; i < end; i += dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n } else {\n for (let i = end - dim; i >= start; i -= dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n let p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n let stop = ear;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n const prev = ear.prev;\n const next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n triangles.push(prev.i, ear.i, next.i); // cut off the triangle\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n const a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox\n const x0 = Math.min(ax, bx, cx),\n y0 = Math.min(ay, by, cy),\n x1 = Math.max(ax, bx, cx),\n y1 = Math.max(ay, by, cy);\n\n let p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n const a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox\n const x0 = Math.min(ax, bx, cx),\n y0 = Math.min(ay, by, cy),\n x1 = Math.max(ax, bx, cx),\n y1 = Math.max(ay, by, cy);\n\n // z-order range for the current triangle bbox;\n const minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n let p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles) {\n let p = start;\n do {\n const a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i, p.i, b.i);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n let a = start;\n do {\n let b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n let c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n const queue = [];\n\n for (let i = 0, len = holeIndices.length; i < len; i++) {\n const start = holeIndices[i] * dim;\n const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n const list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareXYSlope);\n\n // process holes from left to right\n for (let i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareXYSlope(a, b) {\n let result = a.x - b.x;\n // when the left-most point of 2 holes meet at a vertex, sort the holes counterclockwise so that when we find\n // the bridge to the outer shell is always the point that they meet at.\n if (result === 0) {\n result = a.y - b.y;\n if (result === 0) {\n const aSlope = (a.next.y - a.y) / (a.next.x - a.x);\n const bSlope = (b.next.y - b.y) / (b.next.x - b.x);\n result = aSlope - bSlope;\n }\n }\n return result;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole(hole, outerNode) {\n const bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n const bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n let p = outerNode;\n const hx = hole.x;\n const hy = hole.y;\n let qx = -Infinity;\n let m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n // unless they intersect at a vertex, then choose the vertex\n if (equals(hole, p)) return p;\n do {\n if (equals(hole, p.next)) return p.next;\n else if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n const stop = m;\n const mx = m.x;\n const my = m.y;\n let tanMin = Infinity;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n const tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n let p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n let numMerges;\n let inSize = 1;\n\n do {\n let p = list;\n let e;\n list = null;\n let tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n let q = p;\n let pSize = 0;\n for (let i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n let qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n let p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a point lies within a convex triangle but false if its equal to the first point of the triangle\nfunction pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, px, py) {\n return !(ax === px && ay === py) && pointInTriangle(ax, ay, bx, by, cx, cy, px, py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // doesn't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n const o1 = sign(area(p1, q1, p2));\n const o2 = sign(area(p1, q1, q2));\n const o3 = sign(area(p2, q2, p1));\n const o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n let p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n let p = a;\n let inside = false;\n const px = (a.x + b.x) / 2;\n const py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n const a2 = createNode(a.i, a.x, a.y),\n b2 = createNode(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n const p = createNode(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction createNode(i, x, y) {\n return {\n i, // vertex index in coordinates array\n x, y, // vertex coordinates\n prev: null, // previous and next vertex nodes in a polygon ring\n next: null,\n z: 0, // z-order curve value\n prevZ: null, // previous and next nodes in z-order\n nextZ: null,\n steiner: false // indicates whether this is a steiner point\n };\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nexport function deviation(data, holeIndices, dim, triangles) {\n const hasHoles = holeIndices && holeIndices.length;\n const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n let polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (let i = 0, len = holeIndices.length; i < len; i++) {\n const start = holeIndices[i] * dim;\n const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n let trianglesArea = 0;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = triangles[i] * dim;\n const b = triangles[i + 1] * dim;\n const c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n}\n\nfunction signedArea(data, start, end, dim) {\n let sum = 0;\n for (let i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nexport function flatten(data) {\n const vertices = [];\n const holes = [];\n const dimensions = data[0][0].length;\n let holeIndex = 0;\n let prevLen = 0;\n\n for (const ring of data) {\n for (const p of ring) {\n for (let d = 0; d < dimensions; d++) vertices.push(p[d]);\n }\n if (prevLen) {\n holeIndex += prevLen;\n holes.push(holeIndex);\n }\n prevLen = ring.length;\n }\n return {vertices, holes, dimensions};\n}\n","import earcut from 'earcut';\nimport type {\n FontAdapterFont,\n FontAdapterGlyph,\n FontPath,\n} from '@/elements/Text/Vector/fontAdapter';\n\ntype Point = { x: number; y: number };\ntype Contour = Point[];\n\ntype GlyphGeometry = {\n positions: number[];\n indices: number[];\n};\n\ntype CurveQuality = {\n quadraticSteps: number;\n cubicSteps: number;\n};\n\nconst glyphGeometryCache = new Map<string, GlyphGeometry>();\n\nexport function getCurveQuality(fontSize: number): CurveQuality {\n const safeFontSize = Math.max(1, fontSize);\n\n return {\n quadraticSteps: Math.max(8, Math.min(24, Math.ceil(safeFontSize / 8))),\n cubicSteps: Math.max(12, Math.min(36, Math.ceil(safeFontSize / 6))),\n };\n}\n\nfunction signedArea(contour: Contour): number {\n let area = 0;\n\n for (let i = 0; i < contour.length; i++) {\n const p = contour[i];\n const q = contour[(i + 1) % contour.length];\n\n if (!p || !q) {\n continue;\n }\n\n area += p.x * q.y - q.x * p.y;\n }\n\n return area / 2;\n}\n\nfunction pointInPolygon(point: Point, polygon: Contour): boolean {\n let inside = false;\n\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const pi = polygon[i];\n const pj = polygon[j];\n\n if (!pi || !pj) {\n continue;\n }\n\n const intersects =\n pi.y > point.y !== pj.y > point.y &&\n point.x < ((pj.x - pi.x) * (point.y - pi.y)) / (pj.y - pi.y) + pi.x;\n\n if (intersects) {\n inside = !inside;\n }\n }\n\n return inside;\n}\n\nfunction pushQuadratic(\n contour: Contour,\n from: Point,\n cx: number,\n cy: number,\n x: number,\n y: number,\n steps: number,\n): Point {\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n\n contour.push({\n x: mt * mt * from.x + 2 * mt * t * cx + t * t * x,\n y: mt * mt * from.y + 2 * mt * t * cy + t * t * y,\n });\n }\n\n return { x, y };\n}\n\nfunction pushCubic(\n contour: Contour,\n from: Point,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x: number,\n y: number,\n steps: number,\n): Point {\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n\n contour.push({\n x: mt * mt * mt * from.x + 3 * mt * mt * t * c1x + 3 * mt * t * t * c2x + t * t * t * x,\n y: mt * mt * mt * from.y + 3 * mt * mt * t * c1y + 3 * mt * t * t * c2y + t * t * t * y,\n });\n }\n\n return { x, y };\n}\n\nfunction pathToContours(path: FontPath, quality: CurveQuality): Contour[] {\n const contours: Contour[] = [];\n\n let current: Contour | null = null;\n let currentPoint: Point = { x: 0, y: 0 };\n\n for (const command of path.commands) {\n switch (command.type) {\n case 'M': {\n const [x = 0, y = 0] = command.values;\n if (current && current.length >= 3) {\n contours.push(current);\n }\n\n current = [{ x, y }];\n currentPoint = { x, y };\n\n break;\n }\n\n case 'L': {\n const [x = 0, y = 0] = command.values;\n if (!current) current = [];\n\n current.push({ x, y });\n currentPoint = { x, y };\n\n break;\n }\n\n case 'Q': {\n const [x1 = 0, y1 = 0, x = 0, y = 0] = command.values;\n if (!current) current = [];\n\n currentPoint = pushQuadratic(current, currentPoint, x1, y1, x, y, quality.quadraticSteps);\n\n break;\n }\n\n case 'C': {\n const [x1 = 0, y1 = 0, x2 = 0, y2 = 0, x = 0, y = 0] = command.values;\n if (!current) current = [];\n\n currentPoint = pushCubic(current, currentPoint, x1, y1, x2, y2, x, y, quality.cubicSteps);\n\n break;\n }\n\n case 'Z': {\n if (current && current.length >= 3) {\n const first = current[0];\n const last = current[current.length - 1];\n\n if (first && last && first.x === last.x && first.y === last.y) {\n current.pop();\n }\n\n if (current.length >= 3) {\n contours.push(current);\n }\n }\n\n current = null;\n\n break;\n }\n\n default:\n break;\n }\n }\n\n if (current && current.length >= 3) {\n contours.push(current);\n }\n\n return contours;\n}\n\nfunction triangulateContours(contours: Contour[]): GlyphGeometry {\n const cleanContours = contours.filter((c) => c.length >= 3);\n\n if (cleanContours.length === 0) {\n return { positions: [], indices: [] };\n }\n\n const sortedContours = [...cleanContours].sort((a, b) => {\n return Math.abs(signedArea(b)) - Math.abs(signedArea(a));\n });\n\n const used = new Set<Contour>();\n const positions: number[] = [];\n const indices: number[] = [];\n\n for (const outer of sortedContours) {\n if (used.has(outer)) continue;\n\n const outerArea = Math.abs(signedArea(outer));\n\n const holes = sortedContours.filter((candidate) => {\n if (candidate === outer || used.has(candidate)) return false;\n\n const candidateArea = Math.abs(signedArea(candidate));\n\n if (candidateArea >= outerArea) return false;\n\n const firstPoint = candidate[0];\n\n return firstPoint ? pointInPolygon(firstPoint, outer) : false;\n });\n\n used.add(outer);\n\n for (const hole of holes) {\n used.add(hole);\n }\n\n const flat: number[] = [];\n const holeIndices: number[] = [];\n\n for (const p of outer) {\n flat.push(p.x, p.y);\n }\n\n let vertexOffset = outer.length;\n\n for (const hole of holes) {\n holeIndices.push(vertexOffset);\n\n for (const p of hole) {\n flat.push(p.x, p.y);\n }\n\n vertexOffset += hole.length;\n }\n\n const localIndices = earcut(flat, holeIndices, 2);\n const globalVertexOffset = positions.length / 2;\n\n positions.push(...flat);\n\n for (const index of localIndices) {\n indices.push(globalVertexOffset + index);\n }\n }\n\n return { positions, indices };\n}\n\nexport function buildGlyphGeometry(\n fontUrl: string,\n font: FontAdapterFont,\n glyph: FontAdapterGlyph,\n fontSize: number,\n quality: CurveQuality,\n): GlyphGeometry {\n const glyphIndex = glyph.id;\n\n const cacheKey = [fontUrl, glyphIndex, fontSize, quality.quadraticSteps, quality.cubicSteps].join(\n ':',\n );\n\n const cached = glyphGeometryCache.get(cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const glyphPath = font.getGlyphPath(glyph, fontSize);\n const contours = pathToContours(glyphPath, quality);\n const geometry = triangulateContours(contours);\n\n glyphGeometryCache.set(cacheKey, geometry);\n\n return geometry;\n}\n\nexport function appendGlyphGeometry(\n targetPositions: number[],\n targetIndices: number[],\n glyphGeometry: GlyphGeometry,\n offsetX: number,\n offsetY = 0,\n): void {\n if (glyphGeometry.positions.length === 0 || glyphGeometry.indices.length === 0) {\n return;\n }\n\n const vertexOffset = targetPositions.length / 2;\n\n for (let i = 0; i < glyphGeometry.positions.length; i += 2) {\n const x = glyphGeometry.positions[i] ?? 0;\n const y = glyphGeometry.positions[i + 1] ?? 0;\n\n targetPositions.push(x + offsetX, y + offsetY);\n }\n\n for (const index of glyphGeometry.indices) {\n targetIndices.push(vertexOffset + index);\n }\n}\n","import { Shader } from 'pixi.js';\n\nfunction normalizeFillNumber(fill: number | string): number {\n if (typeof fill === 'number') {\n return fill;\n }\n\n let value = fill.trim();\n\n if (value.startsWith('#')) {\n value = value.slice(1);\n }\n\n if (value.length === 3) {\n value = value\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n const parsed = parseInt(value, 16);\n\n return Number.isNaN(parsed) ? 0x000000 : parsed;\n}\n\nfunction fillToGLSLColor(fill: number | string, alpha = 1): string {\n const hex = normalizeFillNumber(fill);\n\n const r = ((hex >> 16) & 0xff) / 255;\n const g = ((hex >> 8) & 0xff) / 255;\n const b = (hex & 0xff) / 255;\n const a = Math.max(0, Math.min(1, alpha));\n\n return `vec4(${r.toFixed(6)}, ${g.toFixed(6)}, ${b.toFixed(6)}, ${a.toFixed(6)})`;\n}\n\nexport function createSolidColorShader(fill: number | string, alpha = 1): Shader {\n const glslColor = fillToGLSLColor(fill, alpha);\n\n const shader = Shader.from({\n gl: {\n vertex: `\n attribute vec2 aPosition;\n attribute vec2 aUV;\n\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n varying vec2 vUV;\n\n void main() {\n mat3 mvp = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n vec3 position = mvp * vec3(aPosition, 1.0);\n vUV = aUV;\n\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n `,\n fragment: `\n precision mediump float;\n varying vec2 vUV;\n\n void main() {\n gl_FragColor = ${glslColor} + vec4(vUV * 0.0, 0.0, 0.0);\n }\n `,\n },\n });\n\n return shader as Shader;\n}\n","import { Mesh, MeshGeometry } from 'pixi.js';\nimport type {\n TextDecorationSegment,\n VectorTextLayer,\n VectorTextState,\n} from '@/elements/Text/types';\nimport { appendGlyphGeometry } from '@/elements/Text/Vector/glyphGeometry';\nimport { createSolidColorShader } from '@/elements/Text/Vector/shader';\n\ntype GlyphGeometryData = {\n positions: number[];\n indices: number[];\n};\n\nexport function normalizeGeometryPositions(positions: Float32Array): {\n width: number;\n height: number;\n minX: number;\n minY: number;\n} {\n if (positions.length === 0) {\n return { width: 1, height: 1, minX: 0, minY: 0 };\n }\n\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (let i = 0; i < positions.length; i += 2) {\n const x = positions[i] ?? 0;\n const y = positions[i + 1] ?? 0;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n\n for (let i = 0; i < positions.length; i += 2) {\n positions[i] = (positions[i] ?? 0) - minX;\n positions[i + 1] = (positions[i + 1] ?? 0) - minY;\n }\n\n return {\n width: Math.max(maxX - minX, 1),\n height: Math.max(maxY - minY, 1),\n minX,\n minY,\n };\n}\n\nexport function getDecorationThickness(fontWeight: string | undefined, fontSize: number): number {\n const weightMultiplier = fontWeight === 'bold' ? 1.35 : 1;\n return Math.max(1, fontSize * 0.055 * weightMultiplier);\n}\n\nexport function buildVectorLayer(\n positions: Float32Array,\n indices: Uint32Array,\n fill: number | string,\n alpha: number,\n originalPositions = positions,\n): VectorTextLayer {\n const geometry = new MeshGeometry({ positions, indices });\n const shader = createSolidColorShader(fill, alpha);\n const mesh = new Mesh({ geometry, shader }) as Mesh;\n\n return {\n geometry,\n mesh,\n shader,\n originalPositions: new Float32Array(originalPositions),\n };\n}\n\nexport function buildStrokeLayers(\n indices: Uint32Array,\n originalPositions: Float32Array,\n stroke: number | string | undefined,\n strokeWidth: number,\n strokeAlpha: number,\n strokeAlign: 'inside' | 'center' | 'outside',\n): VectorTextLayer[] {\n if (stroke === undefined || strokeWidth <= 0 || strokeAlpha <= 0) {\n return [];\n }\n\n const radiusMultiplier = strokeAlign === 'outside' ? 1 : strokeAlign === 'center' ? 0.5 : 0.25;\n const radius = Math.max(0.5, strokeWidth * radiusMultiplier);\n const copyCount = 12;\n const layers: VectorTextLayer[] = [];\n\n for (let i = 0; i < copyCount; i++) {\n const angle = (Math.PI * 2 * i) / copyCount;\n const layer = buildVectorLayer(\n new Float32Array(originalPositions),\n new Uint32Array(indices),\n stroke,\n strokeAlpha,\n );\n\n layer.mesh.position.set(Math.cos(angle) * radius, Math.sin(angle) * radius);\n\n layers.push(layer);\n }\n\n return layers;\n}\n\nexport function buildDecorationLayers(\n segments: TextDecorationSegment[],\n fill: number | string,\n thickness: number,\n underline: boolean | undefined,\n strikethrough: boolean | undefined,\n columns: number,\n): VectorTextLayer[] {\n if ((!underline && !strikethrough) || segments.length === 0) {\n return [];\n }\n\n const meshColumns = Math.max(8, Math.min(64, Math.floor(columns)));\n const layers: VectorTextLayer[] = [];\n\n const buildLayer = (\n ySelector: (segment: TextDecorationSegment) => number,\n ): VectorTextLayer | null => {\n const positions: number[] = [];\n const indices: number[] = [];\n\n for (const segment of segments) {\n const quad = createQuadGeometry(\n segment.x,\n ySelector(segment) - thickness / 2,\n segment.width,\n thickness,\n meshColumns,\n );\n appendGlyphGeometry(positions, indices, quad, 0, 0);\n }\n\n if (positions.length === 0 || indices.length === 0) {\n return null;\n }\n\n const originalPositions = new Float32Array(positions);\n return buildVectorLayer(\n new Float32Array(originalPositions),\n new Uint32Array(indices),\n fill,\n 1,\n originalPositions,\n );\n };\n\n if (underline) {\n const underlineLayer = buildLayer((segment) => segment.underlineY);\n if (underlineLayer) {\n layers.push(underlineLayer);\n }\n }\n\n if (strikethrough) {\n const strikethroughLayer = buildLayer((segment) => segment.strikethroughY);\n if (strikethroughLayer) {\n layers.push(strikethroughLayer);\n }\n }\n\n return layers;\n}\n\nexport function destroyVectorTextState(state: VectorTextState): void {\n const layers = [state.fillLayer, ...state.strokeLayers, ...state.decorationLayers];\n\n for (const { mesh, geometry, shader } of layers) {\n mesh.destroy();\n geometry.destroy(true);\n\n if (typeof shader.destroy === 'function') {\n shader.destroy();\n }\n }\n}\n\nfunction createQuadGeometry(\n x: number,\n y: number,\n width: number,\n height: number,\n segments = 1,\n): GlyphGeometryData {\n if (segments <= 1) {\n return {\n positions: [x, y, x + width, y, x + width, y + height, x, y + height],\n indices: [0, 1, 2, 0, 2, 3],\n };\n }\n\n const positions: number[] = [];\n const indices: number[] = [];\n\n for (let i = 0; i <= segments; i++) {\n const t = i / segments;\n const px = x + width * t;\n\n positions.push(px, y, px, y + height);\n }\n\n for (let i = 0; i < segments; i++) {\n const leftTop = i * 2;\n const leftBottom = leftTop + 1;\n const rightTop = leftTop + 2;\n const rightBottom = leftTop + 3;\n\n indices.push(leftTop, rightTop, rightBottom, leftTop, rightBottom, leftBottom);\n }\n\n return { positions, indices };\n}\n","import type { TextDecorationSegment, VectorTextRenderOptions } from '@/elements/Text/types';\nimport type {\n FontAdapterFont,\n FontAdapterGlyph,\n FontAdapterMetrics,\n} from '@/elements/Text/Vector/fontAdapter';\n\nexport type LayoutLine = {\n text: string;\n width: number;\n};\n\nexport type LineLayout = {\n x: number;\n width: number;\n baselineY: number;\n};\n\nexport type ScaledFontMetrics = {\n ascent: number;\n descent: number;\n underlineOffset: number;\n underlineThickness: number;\n strikePosition: number;\n};\n\nexport function scaleFontMetrics(\n metrics: FontAdapterMetrics,\n fontSize: number,\n unitsPerEm: number,\n): ScaledFontMetrics {\n const scale = fontSize / unitsPerEm;\n\n return {\n ascent: metrics.ascent * scale,\n descent: metrics.descent * scale,\n underlineOffset: metrics.underlinePosition * scale,\n underlineThickness: Math.max(1, metrics.underlineThickness * scale),\n strikePosition: metrics.strikePosition * scale,\n };\n}\n\nexport function buildDecorationSegments(\n lineLayouts: LineLayout[],\n metrics: ScaledFontMetrics,\n): TextDecorationSegment[] {\n return lineLayouts\n .filter((line) => line.width > 0)\n .map((line) => ({\n x: line.x,\n width: line.width,\n underlineY: line.baselineY + metrics.underlineOffset,\n strikethroughY: line.baselineY - metrics.strikePosition,\n }));\n}\n\nexport function getAlignedOffsetX(\n align: VectorTextRenderOptions['align'],\n layoutWidth: number,\n lineWidth: number,\n): number {\n switch (align) {\n case 'center':\n return Math.max((layoutWidth - lineWidth) / 2, 0);\n case 'right':\n return Math.max(layoutWidth - lineWidth, 0);\n default:\n return 0;\n }\n}\n\nexport function layoutTextLines(\n text: string,\n font: FontAdapterFont,\n fontSize: number,\n letterSpacing: number,\n): LayoutLine[] {\n const paragraphs = text.split('\\n');\n const lines: LayoutLine[] = [];\n\n for (const paragraph of paragraphs) {\n lines.push({\n text: paragraph,\n width: measureTextWidth(paragraph, font, fontSize, letterSpacing),\n });\n }\n\n return lines.length > 0\n ? lines\n : [{ text: ' ', width: measureTextWidth(' ', font, fontSize, letterSpacing) }];\n}\n\nfunction measureTextWidth(\n text: string,\n font: FontAdapterFont,\n fontSize: number,\n letterSpacing: number,\n): number {\n if (text.length === 0) return 0;\n\n const glyphs = font.stringToGlyphs(text);\n let width = 0;\n let previousGlyph: FontAdapterGlyph | null = null;\n\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n\n if (!glyph) {\n continue;\n }\n\n if (previousGlyph) {\n const kerning = font.getKerningValue(previousGlyph, glyph);\n width += (kerning * fontSize) / font.unitsPerEm;\n }\n\n width += ((glyph.advanceWidth ?? 0) * fontSize) / font.unitsPerEm;\n\n if (i < glyphs.length - 1) {\n width += letterSpacing;\n }\n\n previousGlyph = glyph;\n }\n\n return width;\n}\n","type GlyphGeometryData = {\n positions: number[];\n indices: number[];\n};\n\ntype Offset2D = {\n x: number;\n y: number;\n};\n\nfunction getGlyphBounds(positions: readonly number[]): { minY: number; maxY: number } {\n let minY = Number.POSITIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (let i = 1; i < positions.length; i += 2) {\n const y = positions[i] ?? 0;\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n\n return { minY, maxY };\n}\n\nexport function applySyntheticItalic(\n glyphGeometry: GlyphGeometryData,\n fontStyle: string | undefined,\n): GlyphGeometryData {\n if (fontStyle !== 'italic' && fontStyle !== 'oblique') {\n return glyphGeometry;\n }\n\n const { positions, indices } = glyphGeometry;\n const bounds = getGlyphBounds(positions);\n const shear = fontStyle === 'oblique' ? 0.14 : 0.22;\n const transformed = new Array<number>(positions.length);\n\n for (let i = 0; i < positions.length; i += 2) {\n const x = positions[i] ?? 0;\n const y = positions[i + 1] ?? 0;\n transformed[i] = x + (bounds.maxY - y) * shear;\n transformed[i + 1] = y;\n }\n\n return { positions: transformed, indices };\n}\n\nexport function getSyntheticBoldOffsets(\n fontWeight: string | undefined,\n fontSize: number,\n): Offset2D[] {\n if (fontWeight !== 'bold') {\n return [{ x: 0, y: 0 }];\n }\n\n const radius = Math.max(0.22, Math.min(0.55, fontSize * 0.009));\n\n return [\n { x: 0, y: 0 },\n { x: -radius, y: 0 },\n { x: radius, y: 0 },\n { x: 0, y: -radius },\n { x: 0, y: radius },\n ];\n}\n","import type {\n VectorTextRenderOptions,\n VectorTextState,\n VectorTextTemplate,\n} from '@/elements/Text/types';\nimport type { FontAdapterGlyph } from '@/elements/Text/Vector/fontAdapter';\nimport { loadFont } from '@/elements/Text/Vector/fontAdapter';\nimport {\n appendGlyphGeometry,\n buildGlyphGeometry,\n getCurveQuality,\n} from '@/elements/Text/Vector/glyphGeometry';\nimport {\n buildDecorationLayers,\n buildStrokeLayers,\n buildVectorLayer,\n getDecorationThickness,\n normalizeGeometryPositions,\n} from '@/elements/Text/Vector/vectorLayers';\nimport {\n buildDecorationSegments,\n getAlignedOffsetX,\n type LineLayout,\n layoutTextLines,\n scaleFontMetrics,\n} from '@/elements/Text/Vector/vectorLayout';\nimport {\n applySyntheticItalic,\n getSyntheticBoldOffsets,\n} from '@/elements/Text/Vector/vectorStyleTransforms';\n\nconst vectorTemplateCache = new Map<string, Promise<VectorTextTemplate>>();\n\nexport function clearVectorTemplateCache(): void {\n vectorTemplateCache.clear();\n}\n\nexport async function buildVectorTextState(\n opts: VectorTextRenderOptions,\n columns: number,\n): Promise<VectorTextState> {\n const template = await getVectorTextTemplate(opts);\n return buildStateFromTemplate(template, opts, columns);\n}\n\nfunction buildStateFromTemplate(\n template: VectorTextTemplate,\n opts: VectorTextRenderOptions,\n columns: number,\n): VectorTextState {\n const {\n fill,\n stroke,\n strokeWidth = 0,\n strokeAlpha = 1,\n strokeAlign = 'center',\n fontWeight,\n } = opts;\n const fillLayer = buildVectorLayer(\n new Float32Array(template.positions),\n new Uint32Array(template.indices),\n fill,\n 1,\n template.positions,\n );\n const strokeLayers = buildStrokeLayers(\n template.indices,\n template.positions,\n stroke,\n strokeWidth,\n strokeAlpha,\n strokeAlign,\n );\n const decorationLayers = buildDecorationLayers(\n template.decorationSegments,\n fill,\n getDecorationThickness(fontWeight, opts.fontSize),\n opts.underline,\n opts.strikethrough,\n columns,\n );\n\n return {\n template,\n fillLayer,\n strokeLayers,\n decorationLayers,\n columns: Math.max(1, Math.floor(columns)),\n textureWidth: template.textureWidth,\n textureHeight: template.textureHeight,\n };\n}\n\nasync function getVectorTextTemplate(opts: VectorTextRenderOptions): Promise<VectorTextTemplate> {\n const key = getVectorTextTemplateKey(opts);\n const cached = vectorTemplateCache.get(key);\n\n if (cached) {\n return cached;\n }\n\n const pending = buildVectorTextTemplate(opts).catch((error: unknown) => {\n vectorTemplateCache.delete(key);\n throw error;\n });\n vectorTemplateCache.set(key, pending);\n return pending;\n}\n\nasync function buildVectorTextTemplate(opts: VectorTextRenderOptions): Promise<VectorTextTemplate> {\n const {\n text,\n fontUrl,\n fontSize,\n fontWeight,\n fontStyle,\n letterSpacing = 0,\n align = 'left',\n lineHeight,\n } = opts;\n\n const safeText = text && text.length > 0 ? text : ' ';\n const font = await loadFont(fontUrl);\n const quality = getCurveQuality(fontSize);\n const lines = layoutTextLines(safeText, font, fontSize, letterSpacing);\n const lineHeightPx = lineHeight ?? fontSize * 1.2;\n const layoutWidth = Math.max(...lines.map((line) => line.width), 1);\n const lineLayouts: LineLayout[] = [];\n const finalPositions: number[] = [];\n const finalIndices: number[] = [];\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex];\n\n if (!line) {\n continue;\n }\n\n const lineGlyphs = font.stringToGlyphs(line.text);\n let cursorX = getAlignedOffsetX(align, layoutWidth, line.width);\n lineLayouts.push({\n x: cursorX,\n width: line.width,\n baselineY: lineIndex * lineHeightPx,\n });\n\n let previousGlyph: FontAdapterGlyph | null = null;\n\n for (let glyphIndex = 0; glyphIndex < lineGlyphs.length; glyphIndex++) {\n const glyph = lineGlyphs[glyphIndex];\n\n if (!glyph) {\n continue;\n }\n\n if (previousGlyph) {\n const kerning = font.getKerningValue(previousGlyph, glyph);\n cursorX += (kerning * fontSize) / font.unitsPerEm;\n }\n\n const glyphGeometry = buildGlyphGeometry(fontUrl, font, glyph, fontSize, quality);\n const styledGlyphGeometry = applySyntheticItalic(glyphGeometry, fontStyle);\n\n for (const boldOffset of getSyntheticBoldOffsets(fontWeight, fontSize)) {\n appendGlyphGeometry(\n finalPositions,\n finalIndices,\n styledGlyphGeometry,\n cursorX + boldOffset.x,\n lineIndex * lineHeightPx + boldOffset.y,\n );\n }\n\n cursorX += ((glyph.advanceWidth ?? 0) * fontSize) / font.unitsPerEm;\n\n if (glyphIndex < lineGlyphs.length - 1) {\n cursorX += letterSpacing;\n }\n\n previousGlyph = glyph;\n }\n }\n\n const positions = new Float32Array(finalPositions);\n const indices = new Uint32Array(finalIndices);\n const bounds = normalizeGeometryPositions(positions);\n const normalizedLineLayouts = lineLayouts.map((line) => ({\n x: line.x - bounds.minX,\n width: line.width,\n baselineY: line.baselineY - bounds.minY,\n }));\n const metrics = scaleFontMetrics(font.metrics, fontSize, font.unitsPerEm);\n\n return {\n positions,\n indices,\n decorationSegments: buildDecorationSegments(normalizedLineLayouts, metrics),\n textureWidth: bounds.width,\n textureHeight: bounds.height,\n };\n}\n\nfunction getVectorTextTemplateKey(opts: VectorTextRenderOptions): string {\n return JSON.stringify({\n text: opts.text,\n fontUrl: opts.fontUrl,\n fontSize: opts.fontSize,\n fontWeight: opts.fontWeight ?? 'normal',\n fontStyle: opts.fontStyle ?? 'normal',\n letterSpacing: opts.letterSpacing,\n align: opts.align ?? 'left',\n lineHeight: opts.lineHeight ?? null,\n });\n}\n","import type {\n MeshEffectFnContext,\n MeshEffectFunction,\n VectorTextLayer,\n VectorTextState,\n} from '@/elements/Text/types';\n\nfunction getVectorTextLayers(state: VectorTextState): VectorTextLayer[] {\n return [state.fillLayer, ...state.strokeLayers, ...state.decorationLayers];\n}\n\nexport function deformVectorText(\n state: VectorTextState,\n effectFn: MeshEffectFunction,\n ctx: MeshEffectFnContext,\n): void {\n const width = Math.max(state.textureWidth, 1);\n const height = Math.max(state.textureHeight, 1);\n\n for (const layer of getVectorTextLayers(state)) {\n const { geometry, originalPositions } = layer;\n const positions = geometry.positions;\n\n for (let i = 0; i < positions.length; i += 2) {\n const originalX = originalPositions[i] ?? 0;\n const originalY = originalPositions[i + 1] ?? 0;\n\n const t = Math.max(0, Math.min(1, originalX / width));\n const col = effectFn(t, ctx);\n\n const dy = col.dy;\n const scaleY = col.scaleY ?? 1;\n const anchorY = col.anchorY ?? 1;\n\n let y: number;\n\n if (anchorY >= 1) {\n const bottomY = height + dy;\n y = bottomY - (height - originalY) * scaleY;\n } else if (anchorY <= 0) {\n const topY = dy;\n y = topY + originalY * scaleY;\n } else {\n const midY = height / 2 + dy;\n y = midY + (originalY - height / 2) * scaleY;\n }\n\n positions[i] = originalX;\n positions[i + 1] = y;\n }\n\n geometry.getBuffer('aPosition').update();\n }\n}\n","import type {\n MeshEffectEntry,\n MeshEffectFunction,\n RegisterMeshEffectOptions,\n} from '@/elements/Text/types';\n\nconst DEFAULT_MESH_COLUMNS = 100;\n\nconst effectRegistry = new Map<string, MeshEffectEntry>();\n\nfunction normalizeColumns(columns?: number): number {\n if (typeof columns !== 'number' || Number.isNaN(columns)) {\n return DEFAULT_MESH_COLUMNS;\n }\n\n return Math.max(1, Math.floor(columns));\n}\n\nexport function registerMeshEffect(\n name: string,\n fn: MeshEffectFunction,\n options?: RegisterMeshEffectOptions,\n): void {\n effectRegistry.set(name, {\n fn,\n columns: normalizeColumns(options?.columns),\n });\n}\n\nexport function getMeshEffect(name: string): MeshEffectEntry | undefined {\n return effectRegistry.get(name);\n}\n\nexport function listMeshEffects(): string[] {\n return [...effectRegistry.keys()];\n}\n","import type { Container } from 'pixi.js';\n\nimport type {\n MeshEffectFnContext,\n VectorTextRenderOptions,\n VectorTextState,\n} from '@/elements/Text/types';\nimport { buildVectorTextState } from '@/elements/Text/Vector/builder';\nimport { deformVectorText } from '@/elements/Text/Vector/deform';\nimport { getMeshEffect } from '@/elements/Text/Vector/registry';\nimport { destroyVectorTextState } from '@/elements/Text/Vector/vectorLayers';\n\ntype EffectParams = {\n type: string;\n intensity?: number;\n direction?: 'up' | 'down';\n radius?: number;\n};\n\n/**\n * Builds a vector text mesh for the given effect type.\n * Does NOT apply the effect deformation — call reapplyVectorTextEffect\n * after adding the mesh to the display tree.\n */\nexport async function renderVectorText(\n textOpts: VectorTextRenderOptions,\n effectType: string,\n): Promise<VectorTextState> {\n const entry = getMeshEffect(effectType);\n\n if (!entry) {\n throw new Error(`[Vector] Unknown effect type \"${effectType}\".`);\n }\n\n return buildVectorTextState(textOpts, entry.columns);\n}\n\nexport async function refreshMountedVectorTextLayers(\n state: VectorTextState,\n textOpts: VectorTextRenderOptions,\n effectType: string,\n displayObject: Container,\n): Promise<VectorTextState> {\n const nextState = await renderVectorText(textOpts, effectType);\n\n for (const layer of [state.fillLayer, ...state.strokeLayers, ...state.decorationLayers]) {\n displayObject.removeChild(layer.mesh);\n }\n\n destroyVectorTextState(state);\n\n for (const layer of nextState.strokeLayers) {\n displayObject.addChild(layer.mesh);\n }\n displayObject.addChild(nextState.fillLayer.mesh);\n for (const layer of nextState.decorationLayers) {\n displayObject.addChild(layer.mesh);\n }\n\n return nextState;\n}\n\n/**\n * Applies (or re-applies) the effect deformation to an existing vector state.\n * Must be called after the mesh is added to the display tree.\n */\nexport function reapplyVectorTextEffect(\n state: VectorTextState,\n effect: EffectParams,\n fontSize: number,\n): void {\n const entry = getMeshEffect(effect.type);\n\n if (!entry) return;\n\n const ctx: MeshEffectFnContext = {\n textureWidth: state.textureWidth,\n textureHeight: state.textureHeight,\n fontSize,\n radius: effect.radius ?? 200,\n intensity: effect.intensity ?? 50,\n direction: effect.direction ?? 'up',\n };\n\n deformVectorText(state, entry.fn, ctx);\n}\n","import type { Container } from 'pixi.js';\n\nimport arialFontUrl from '@/elements/Text/Fonts/Arial/Arial.ttf?url';\nimport type { TextEffectOptions } from '@/elements/Text/types';\nimport {\n destroyVectorTextState,\n reapplyVectorTextEffect,\n renderVectorText,\n type VectorTextRenderOptions,\n type VectorTextState,\n} from '@/elements/Text/Vector';\n\nexport function resolveVectorFontUrl(owner: string, fontUrl?: string): string {\n if (fontUrl) {\n return fontUrl;\n }\n\n console.warn(`[${owner}] fontUrl is not provided; using Arial.`);\n return arialFontUrl;\n}\n\nexport function disposeVectorTextState(state: VectorTextState | null): null {\n if (state) {\n destroyVectorTextState(state);\n }\n\n return null;\n}\n\ntype MountVectorTextEffectOptions = {\n version: number;\n currentVersion: number;\n destroyed: boolean;\n effect: TextEffectOptions;\n textOpts: VectorTextRenderOptions;\n clearContent: () => void;\n setVectorState: (state: VectorTextState) => void;\n displayObject: Container;\n};\n\nexport async function mountVectorTextEffect({\n version,\n currentVersion,\n destroyed,\n effect,\n textOpts,\n clearContent,\n setVectorState,\n displayObject,\n}: MountVectorTextEffectOptions): Promise<void> {\n const state = await renderVectorText(textOpts, effect.type);\n\n if (destroyed || version !== currentVersion) {\n destroyVectorTextState(state);\n return;\n }\n\n clearContent();\n setVectorState(state);\n for (const layer of state.strokeLayers) {\n displayObject.addChild(layer.mesh);\n }\n displayObject.addChild(state.fillLayer.mesh);\n for (const layer of state.decorationLayers) {\n displayObject.addChild(layer.mesh);\n }\n reapplyVectorTextEffect(state, effect, textOpts.fontSize);\n}\n","import type { Container } from 'pixi.js';\n\nimport type {\n TextEffectOptions,\n VectorTextRenderOptions,\n VectorTextState,\n} from '@/elements/Text/types';\nimport { reapplyVectorTextEffect, refreshMountedVectorTextLayers } from '@/elements/Text/Vector';\n\nconst EFFECT_PARAM_KEYS = new Set(['intensity', 'direction', 'radius']);\nconst TRANSFORM_KEYS = new Set(['x', 'y', 'rotationDeg', 'scaleX', 'scaleY', 'zIndex', 'visible']);\nconst BACKGROUND_KEYS = new Set(['background', 'backgroundAlpha', 'backgroundPadding']);\nconst STYLE_ONLY_VECTOR_KEYS = new Set([\n 'fill',\n 'stroke',\n 'strokeWidth',\n 'strokeAlpha',\n 'strokeAlign',\n 'underline',\n 'strikethrough',\n]);\n\nexport function isTransformOnlyUpdate(keys: string[]): boolean {\n return keys.length > 0 && keys.every((key) => TRANSFORM_KEYS.has(key));\n}\n\nexport function isEffectOnlyUpdate(\n keys: string[],\n nextEffect: TextEffectOptions | undefined,\n prevEffect: TextEffectOptions | undefined,\n vectorState: VectorTextState | null,\n): boolean {\n if (!nextEffect || !prevEffect) {\n return false;\n }\n\n const effectKeys = Object.keys(nextEffect);\n\n return (\n keys.includes('effect') &&\n nextEffect.type === prevEffect.type &&\n effectKeys.every((key) => EFFECT_PARAM_KEYS.has(key) || key === 'type') &&\n vectorState !== null\n );\n}\n\nexport function reapplyTextEffect(\n vectorState: VectorTextState | null,\n effect: TextEffectOptions | undefined,\n fontSize: number,\n): void {\n if (!vectorState || !effect) {\n return;\n }\n\n reapplyVectorTextEffect(vectorState, effect, fontSize);\n}\n\nexport function isBackgroundOnlyUpdate(keys: string[]): boolean {\n return keys.length > 0 && keys.every((key) => BACKGROUND_KEYS.has(key));\n}\n\nexport function isStyleOnlyVectorUpdate(\n keys: string[],\n vectorState: VectorTextState | null,\n effect: TextEffectOptions | undefined,\n): boolean {\n return (\n vectorState !== null &&\n !!effect &&\n keys.length > 0 &&\n keys.every((key) => STYLE_ONLY_VECTOR_KEYS.has(key))\n );\n}\n\ntype RefreshMountedVectorTextStyleOptions = {\n state: VectorTextState;\n effect: TextEffectOptions | undefined;\n textOpts: VectorTextRenderOptions;\n displayObject: Container;\n setVectorState: (state: VectorTextState) => void;\n};\n\nexport async function refreshMountedVectorTextStyle({\n state,\n effect,\n textOpts,\n displayObject,\n setVectorState,\n}: RefreshMountedVectorTextStyleOptions): Promise<void> {\n if (!effect) {\n return;\n }\n\n const nextState = await refreshMountedVectorTextLayers(\n state,\n textOpts,\n effect.type,\n displayObject,\n );\n setVectorState(nextState);\n reapplyTextEffect(nextState, effect, textOpts.fontSize);\n}\n","import { CanvasTextMetrics, Text, TextStyle } from 'pixi.js';\nimport type { TextStyleOptions } from '@/elements/Text/types';\n\nexport function createRasterTextNode(options: TextStyleOptions): Text {\n return new Text({\n text: options.text,\n style: createRasterTextStyle(options),\n });\n}\n\nexport function createRasterTextStyle(options: TextStyleOptions): TextStyle {\n const {\n fontFamily = 'Arial',\n fontSize = 24,\n fill = 0x000000,\n stroke,\n strokeWidth = 0,\n strokeAlpha = 1,\n fontWeight = 'normal',\n fontStyle = 'normal',\n letterSpacing = 0,\n align = 'left',\n lineHeight,\n } = options;\n\n return new TextStyle({\n fontFamily,\n fontSize,\n fill,\n fontWeight: fontWeight as 'normal' | 'bold',\n fontStyle: fontStyle as 'normal' | 'italic' | 'oblique',\n letterSpacing,\n align,\n ...(stroke !== undefined && strokeWidth > 0\n ? {\n stroke: withAlpha(stroke, strokeAlpha),\n strokeThickness: strokeWidth,\n }\n : {}),\n ...(lineHeight !== undefined ? { lineHeight } : {}),\n });\n}\n\nfunction withAlpha(color: number | string, alpha: number): string {\n const normalizedAlpha = Math.max(0, Math.min(1, alpha));\n\n if (typeof color === 'number') {\n const hex = `#${color.toString(16).padStart(6, '0').slice(-6)}`;\n return hexToRgba(hex, normalizedAlpha);\n }\n\n return hexToRgba(color, normalizedAlpha);\n}\n\nfunction hexToRgba(value: string, alpha: number): string {\n let normalized = value.trim();\n\n if (normalized.startsWith('#')) {\n normalized = normalized.slice(1);\n }\n\n if (normalized.length === 3) {\n normalized = normalized\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `rgba(0, 0, 0, ${alpha})`;\n }\n\n const int = Number.parseInt(normalized, 16);\n const r = (int >> 16) & 0xff;\n const g = (int >> 8) & 0xff;\n const b = int & 0xff;\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport function measureRasterTextLayout(options: TextStyleOptions): CanvasTextMetrics {\n return CanvasTextMetrics.measureText(options.text || ' ', createRasterTextStyle(options));\n}\n\nexport function measureRasterTextWidth(options: TextStyleOptions): number {\n const metrics = measureRasterTextLayout({\n ...options,\n lineHeight: undefined,\n });\n return Math.max(metrics.width, 1);\n}\n\nexport function updateRasterTextResolution(\n textNode: Text | null,\n scaleX: number,\n scaleY: number,\n): void {\n if (!textNode) return;\n\n const dpr = window.devicePixelRatio ?? 1;\n const maxScale = Math.max(Math.abs(scaleX), Math.abs(scaleY), 1);\n textNode.resolution = dpr * maxScale;\n}\n","import { Container, Graphics, type Text } from 'pixi.js';\n\nimport { BaseElement } from '@/core/BaseElement';\nimport { createTextBackground } from '@/elements/Text/textBackground';\nimport { disposeVectorTextState, mountVectorTextEffect } from '@/elements/Text/textEffectMount';\nimport {\n isBackgroundOnlyUpdate,\n isEffectOnlyUpdate,\n isStyleOnlyVectorUpdate,\n isTransformOnlyUpdate,\n reapplyTextEffect,\n refreshMountedVectorTextStyle,\n} from '@/elements/Text/textEffectUpdate';\nimport { updateRasterTextResolution } from '@/elements/Text/textRaster';\nimport type { BaseTextOptions } from '@/elements/Text/types';\nimport type { VectorTextRenderOptions, VectorTextState } from '@/elements/Text/Vector';\n\nexport abstract class BaseTextElement<\n TOptions extends BaseTextOptions,\n> extends BaseElement<TOptions> {\n protected vectorState: VectorTextState | null = null;\n protected standardTextNode: Text | null = null;\n protected backgroundNode: Graphics | null = null;\n protected decorationNode: Graphics | null = null;\n protected renderVersion = 0;\n protected destroyed = false;\n\n protected async initTextElement(): Promise<void> {\n this.displayObject = new Container();\n await this.beforeInitialRender();\n await this.renderContent();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.destroyed = true;\n this.renderVersion++;\n this.beforeDestroy();\n this.clearContent();\n this.displayObject.destroy({ children: true });\n }\n\n protected beforeDestroy(): void {}\n\n protected async beforeInitialRender(): Promise<void> {}\n\n protected clearContent(): void {\n this.vectorState = disposeVectorTextState(this.vectorState);\n this.standardTextNode = null;\n this.backgroundNode = null;\n this.decorationNode = null;\n this.displayObject.removeChildren();\n }\n\n protected refreshTextResolution(\n scaleX = this.options.scaleX ?? 1,\n scaleY = this.options.scaleY ?? 1,\n ): void {\n updateRasterTextResolution(this.standardTextNode, scaleX, scaleY);\n }\n\n protected async dispatchUpdate(next: Partial<TOptions>): Promise<void> {\n const keys = Object.keys(next);\n const hasEffectUpdate = 'effect' in next;\n const mergedEffect = hasEffectUpdate\n ? next.effect\n ? { ...(this.options.effect ?? {}), ...next.effect }\n : undefined\n : this.options.effect;\n\n if (isTransformOnlyUpdate(keys)) {\n Object.assign(this.options, next);\n this.refreshTextResolution();\n this.applyBaseTransform();\n return;\n }\n\n if (isEffectOnlyUpdate(keys, mergedEffect, this.options.effect, this.vectorState)) {\n Object.assign(this.options, next);\n this.options.effect = mergedEffect;\n reapplyTextEffect(this.vectorState, this.options.effect, this.getResolvedFontSize());\n this.centerPivot();\n return;\n }\n\n if (isBackgroundOnlyUpdate(keys)) {\n Object.assign(this.options, next);\n this.clearBackgroundNode();\n this.renderBackground();\n return;\n }\n\n if (isStyleOnlyVectorUpdate(keys, this.vectorState, mergedEffect)) {\n const currentVectorState = this.vectorState;\n\n if (!currentVectorState) {\n return;\n }\n\n Object.assign(this.options, next);\n if (hasEffectUpdate) {\n this.options.effect = mergedEffect;\n }\n\n const textOpts = this.getVectorRenderOptions();\n\n if (!textOpts) {\n return;\n }\n\n await refreshMountedVectorTextStyle({\n state: currentVectorState,\n effect: this.options.effect,\n textOpts,\n displayObject: this.displayObject,\n setVectorState: (state) => {\n this.vectorState = state;\n },\n });\n\n this.clearBackgroundNode();\n this.renderBackground();\n this.centerPivot();\n return;\n }\n\n if (await this.handleSpecializedUpdate(next, keys)) {\n return;\n }\n\n const prevFontSize = this.getResolvedFontSize();\n Object.assign(this.options, next);\n if (hasEffectUpdate) {\n this.options.effect = mergedEffect;\n }\n this.afterOptionsAssigned(next, prevFontSize);\n\n await this.renderContent();\n\n if (!this.destroyed) {\n this.applyBaseTransform();\n this.centerPivot();\n }\n }\n\n protected getResolvedFontSize(): number {\n return this.options.fontSize ?? 24;\n }\n\n protected async handleSpecializedUpdate(\n _next: Partial<TOptions>,\n _keys: string[],\n ): Promise<boolean> {\n return false;\n }\n\n protected afterOptionsAssigned(_next: Partial<TOptions>, _prevFontSize: number): void {}\n\n protected async renderContent(): Promise<void> {\n const version = ++this.renderVersion;\n const effect = this.options.effect;\n\n if (effect) {\n const textOpts = this.getVectorRenderOptions();\n\n if (!textOpts) {\n return;\n }\n\n await mountVectorTextEffect({\n version,\n currentVersion: this.renderVersion,\n destroyed: this.destroyed,\n effect,\n textOpts,\n clearContent: () => this.clearContent(),\n setVectorState: (state) => {\n this.vectorState = state;\n },\n displayObject: this.displayObject,\n });\n\n this.renderBackground();\n\n return;\n }\n\n this.renderStandardContent();\n this.renderBackground();\n this.renderDecorations();\n }\n\n protected setStandardTextNode(textNode: Text): void {\n this.standardTextNode = textNode;\n this.refreshTextResolution();\n this.displayObject.addChild(textNode);\n }\n\n protected renderDecorations(): void {\n const { underline, strikethrough, fill = 0x000000 } = this.options;\n\n if (!underline && !strikethrough) {\n return;\n }\n\n if (this.vectorState) {\n return;\n }\n\n const thickness = this.getDecorationThickness();\n const segments = this.getDecorationSegments();\n\n if (segments.length === 0) {\n return;\n }\n\n const decoration = new Graphics();\n\n for (const segment of segments) {\n if (segment.width <= 0) {\n continue;\n }\n\n if (underline) {\n decoration\n .moveTo(segment.x, segment.underlineY)\n .lineTo(segment.x + segment.width, segment.underlineY)\n .stroke({ color: fill, width: thickness, cap: 'square' });\n }\n\n if (strikethrough) {\n decoration\n .moveTo(segment.x, segment.strikethroughY)\n .lineTo(segment.x + segment.width, segment.strikethroughY)\n .stroke({ color: fill, width: thickness, cap: 'square' });\n }\n }\n\n this.decorationNode = decoration;\n this.displayObject.addChild(decoration);\n }\n\n protected renderBackground(): void {\n const bounds = this.getContentBounds();\n const backgroundNode = createTextBackground(this.options, this.getResolvedFontSize(), bounds);\n\n if (!backgroundNode) {\n return;\n }\n\n this.backgroundNode = backgroundNode;\n this.displayObject.addChildAt(backgroundNode, 0);\n }\n\n private clearBackgroundNode(): void {\n if (!this.backgroundNode) {\n return;\n }\n\n this.displayObject.removeChild(this.backgroundNode);\n this.backgroundNode.destroy();\n this.backgroundNode = null;\n }\n\n protected getContentBounds(): { x: number; y: number; width: number; height: number } {\n if (this.standardTextNode) {\n return this.standardTextNode.getLocalBounds();\n }\n\n if (this.vectorState) {\n return this.vectorState.fillLayer.mesh.getLocalBounds();\n }\n\n return this.displayObject.getLocalBounds();\n }\n\n protected getDecorationSegments(): Array<{\n x: number;\n width: number;\n underlineY: number;\n strikethroughY: number;\n }> {\n const bounds = this.getContentBounds();\n\n if (bounds.width <= 0) {\n return [];\n }\n\n const fontSize = this.getResolvedFontSize();\n const lineInset = Math.max(0, fontSize * 0.04);\n\n return [\n {\n x: bounds.x,\n width: bounds.width,\n underlineY: bounds.y + bounds.height - lineInset,\n strikethroughY: bounds.y + bounds.height * 0.45,\n },\n ];\n }\n\n protected getDecorationThickness(fontSize = this.getResolvedFontSize()): number {\n const weightMultiplier = (this.options.fontWeight ?? 'normal') === 'bold' ? 1.35 : 1;\n return Math.max(1, fontSize * 0.055 * weightMultiplier);\n }\n\n protected abstract renderStandardContent(): void;\n protected abstract getVectorRenderOptions(): VectorTextRenderOptions | null;\n}\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\nregisterMeshEffect('Arch', (t, ctx) => {\n const i = ctx.intensity / 100;\n const sagitta = ctx.textureHeight * 2.5 * i;\n\n if (sagitta < 0.5) return { dy: 0 };\n\n const hw = ctx.textureWidth / 2;\n const radius = (hw * hw + sagitta * sagitta) / (2 * sagitta);\n const halfAngle = Math.asin(Math.min(hw / radius, 1));\n const angle = halfAngle * (2 * t - 1);\n const cy = radius - sagitta;\n const arcY = cy - radius * Math.cos(angle);\n const dy = ctx.direction === 'down' ? -arcY : arcY;\n\n return { dy };\n});\n","import type { MeshEffectFunction } from '@/elements/Text/types';\n\ntype AnchorDirection = {\n up: 0 | 1;\n down: 0 | 1;\n};\n\nexport function createSinusoidalScaleEffect(anchorY: AnchorDirection): MeshEffectFunction {\n return (t, ctx) => {\n const i = ctx.intensity / 100;\n const scaleY = Math.max(0.1, 1 - i * Math.sin(t * Math.PI));\n\n return {\n dy: 0,\n scaleY,\n anchorY: ctx.direction === 'down' ? anchorY.down : anchorY.up,\n };\n };\n}\n\nexport function createLinearScaleEffect(\n anchorY: 0 | 0.5 | 1,\n directionBias: 'up' | 'down',\n): MeshEffectFunction {\n return (t, ctx) => {\n const i = ctx.intensity / 100;\n const tEff = ctx.direction === directionBias ? 1 - t : t;\n const scaleY = Math.max(0.1, 1 - i * tEff);\n\n return { dy: 0, scaleY, anchorY };\n };\n}\n\nexport function createCenterSinusoidalScaleEffect(mode: 'expand' | 'squeeze'): MeshEffectFunction {\n return (t, ctx) => {\n const i = ctx.intensity / 100;\n const wave = Math.sin(t * Math.PI);\n const squeeze = Math.max(0.1, 1 - i * wave);\n const expand = 1 + i * wave;\n const isExpanded =\n (mode === 'expand' && ctx.direction !== 'down') ||\n (mode === 'squeeze' && ctx.direction === 'down');\n\n return {\n dy: 0,\n scaleY: isExpanded ? expand : squeeze,\n anchorY: 0.5,\n };\n };\n}\n","import { createSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Top edge flat, bottom centre raised (chars shorter at centre, tops aligned).\nregisterMeshEffect('Bridge', createSinusoidalScaleEffect({ up: 0, down: 1 }));\n","import { createCenterSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Edges full height, centre expanded (center-fixed so bulge is symmetric).\n// direction:'down' turns Bulge into Pinch.\nregisterMeshEffect('Bulge', createCenterSinusoidalScaleEffect('expand'));\n","import { createLinearScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Centre-aligned, narrow on left expanding to full height on right.\nregisterMeshEffect('Cone', createLinearScaleEffect(0.5, 'up'));\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\nregisterMeshEffect('Curved', (t, ctx) => {\n const i = ctx.intensity / 100;\n const arc = (Math.PI / 2) * i;\n const radius = arc > 0.001 ? ctx.textureWidth / (2 * Math.sin(arc / 2)) : ctx.textureWidth * 100;\n const startAngle = -Math.PI / 2 - arc / 2;\n const angle = startAngle + t * arc;\n const midY = radius;\n const arcY = radius * Math.sin(angle) + midY - ctx.textureHeight / 2;\n const dy = ctx.direction === 'down' ? -arcY : arcY;\n return { dy };\n});\n","import { createLinearScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Top flat, tall→short left→right (top-fixed anchor).\nregisterMeshEffect('Downward', createLinearScaleEffect(0, 'down'));\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\nregisterMeshEffect('Normal', (_t, _ctx) => ({ dy: 0 }));\n","import { createCenterSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Edges full height, centre squeezed (center-fixed so squeeze is symmetric).\n// direction:'down' turns Pinch into Bulge.\nregisterMeshEffect('Pinch', createCenterSinusoidalScaleEffect('squeeze'), { columns: 250 });\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Centre stretched taller, edges compressed shorter, with a broad\n// perspective-style taper across the whole word. Uses a pointed\n// profile rather than a rounded bulge so the sides feel more geometric.\nregisterMeshEffect(\n 'Perspective',\n (t, ctx) => {\n const i = ctx.intensity / 100;\n const centerWeight = 1 - Math.abs(2 * t - 1);\n const plateauWidth = 0.18;\n const pointedWeight = centerWeight >= 1 - plateauWidth ? 1 : centerWeight / (1 - plateauWidth);\n\n const compressedScale = Math.max(0.2, 1 - i * 0.55);\n const expandedScale = 1 + i * 0.75;\n const scaleY =\n ctx.direction === 'down'\n ? expandedScale + (compressedScale - expandedScale) * pointedWeight\n : compressedScale + (expandedScale - compressedScale) * pointedWeight;\n\n return { dy: 0, scaleY, anchorY: 0.5 };\n },\n { columns: 180 },\n);\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Bottom edge flat, centre full height, corners shorter with a sharper\n// roof-like taper instead of a rounded arch.\nregisterMeshEffect('Pointed', (t, ctx) => {\n const i = ctx.intensity / 100;\n const centerPeak = 1 - Math.abs(2 * t - 1);\n const scaleY = Math.max(0.1, 1 - i * (1 - centerPeak));\n const anchorY = ctx.direction === 'down' ? 0 : 1;\n\n return { dy: 0, scaleY, anchorY };\n});\n","import { createLinearScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Bottom flat, short→tall left→right (bottom-fixed anchor).\nregisterMeshEffect('Upward', createLinearScaleEffect(1, 'up'));\n","import { createSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Bottom edge flat, top centre dips (chars shorter at centre, bottoms aligned).\nregisterMeshEffect('Valley', createSinusoidalScaleEffect({ up: 1, down: 0 }), { columns: 160 });\n","import type { Text } from 'pixi.js';\n\nimport { BaseTextElement } from '@/elements/Text/BaseTextElement';\nimport { resolveVectorFontUrl } from '@/elements/Text/textEffectMount';\nimport {\n createRasterTextNode,\n createRasterTextStyle,\n measureRasterTextLayout,\n} from '@/elements/Text/textRaster';\nimport type { TextOptions } from '@/elements/Text/types';\nimport type { VectorTextRenderOptions } from '@/elements/Text/Vector';\nimport '@/elements/Text/Vector/effects';\n\nexport class TextElement extends BaseTextElement<TextOptions> {\n async init(): Promise<void> {\n await this.initTextElement();\n }\n\n async update(next: Partial<TextOptions>): Promise<void> {\n await this.dispatchUpdate(next);\n }\n\n protected renderStandardContent(): void {\n this.clearContent();\n\n const fontSize = this.getResolvedFontSize();\n\n const textNode = createRasterTextNode({\n ...this.options,\n fontSize,\n lineHeight:\n this.options.lineHeight !== undefined ? this.options.lineHeight * fontSize : undefined,\n }) as Text;\n\n this.setStandardTextNode(textNode);\n }\n\n protected getVectorRenderOptions(): VectorTextRenderOptions | null {\n const {\n text,\n fontSize = 24,\n fill = 0x000000,\n stroke,\n strokeWidth,\n strokeAlpha,\n strokeAlign,\n fontWeight,\n fontStyle,\n underline,\n strikethrough,\n letterSpacing = 0,\n fontUrl,\n align = 'left',\n lineHeight,\n } = this.options;\n const resolvedFontUrl = resolveVectorFontUrl('TextElement', fontUrl);\n\n return {\n text,\n fontUrl: resolvedFontUrl,\n fontSize,\n fill,\n stroke,\n strokeWidth,\n strokeAlpha,\n strokeAlign,\n fontWeight,\n fontStyle,\n underline,\n strikethrough,\n letterSpacing,\n align,\n ...(lineHeight !== undefined ? { lineHeight: lineHeight * fontSize } : {}),\n };\n }\n\n protected override getDecorationSegments(): Array<{\n x: number;\n width: number;\n underlineY: number;\n strikethroughY: number;\n }> {\n const fontSize = this.getResolvedFontSize();\n\n if (!this.options.text.includes('\\n')) {\n const bounds = this.getContentBounds();\n\n if (bounds.width <= 0) {\n return [];\n }\n\n const leadingInset = Math.max(2, fontSize * 0.08);\n\n return [\n {\n x: bounds.x + leadingInset,\n width: Math.max(0, bounds.width - leadingInset),\n underlineY: bounds.y + bounds.height - Math.max(fontSize * 0.1, 0.5),\n strikethroughY: bounds.y + bounds.height * 0.5,\n },\n ];\n }\n\n const style = createRasterTextStyle({\n ...this.options,\n fontSize,\n lineHeight:\n this.options.lineHeight !== undefined ? this.options.lineHeight * fontSize : undefined,\n });\n const metrics = measureRasterTextLayout({\n ...this.options,\n fontSize,\n lineHeight:\n this.options.lineHeight !== undefined ? this.options.lineHeight * fontSize : undefined,\n });\n const layoutWidth = metrics.maxLineWidth;\n const bounds = this.getContentBounds();\n const ascent = metrics.fontProperties.ascent;\n const descent = metrics.fontProperties.descent;\n const leadingInset = Math.max(2, fontSize * 0.08);\n\n return metrics.lines.map((_line, index) => {\n const lineWidth = metrics.lineWidths[index] ?? 0;\n const offsetX = this.getAlignedOffsetX(style.align, layoutWidth, lineWidth);\n const lineTop = bounds.y + index * metrics.lineHeight;\n const extraLeading = Math.max(0, metrics.lineHeight - (ascent + descent));\n const contentTop = lineTop + extraLeading / 2;\n const contentHeight = ascent + descent;\n const baselineY = contentTop + ascent;\n\n return {\n x: bounds.x + offsetX + leadingInset,\n width: Math.max(0, lineWidth - leadingInset),\n underlineY: baselineY + Math.max(descent * 0.55, fontSize * 0.08),\n strikethroughY: contentTop + contentHeight * 0.54,\n };\n });\n }\n\n private getAlignedOffsetX(\n align: 'left' | 'center' | 'right' | 'justify',\n layoutWidth: number,\n lineWidth: number,\n ): number {\n if (align === 'center') {\n return (layoutWidth - lineWidth) / 2;\n }\n\n if (align === 'right') {\n return layoutWidth - lineWidth;\n }\n\n return 0;\n }\n}\n","import type { ElementFactory } from '@/core/ElementRegistry';\nimport { TextElement } from '@/elements/Text/TextElement';\nimport type { TextOptions } from '@/elements/Text/types';\n\nexport const TEXT_FACTORIES: Record<string, ElementFactory> = {\n text: (opts) => new TextElement(opts as TextOptions),\n};\n\nexport type { TextOptions };\nexport { TextElement };\n","import type { ElementRegistry } from '@/core/ElementRegistry';\nimport { IMAGE_FACTORIES } from '@/elements/Image';\nimport { getShapeFactories } from '@/elements/Shape/registry';\nimport { SVG_FACTORIES } from '@/elements/SVG';\nimport { TEXT_FACTORIES } from '@/elements/Text/registry';\n\nfunction registerFactories(\n registry: ElementRegistry,\n factories: Iterable<readonly [string, (typeof IMAGE_FACTORIES)[string]]>,\n): void {\n for (const [type, factory] of factories) {\n registry.registerFactory(type, factory);\n }\n}\n\nexport function loadElements(registry: ElementRegistry): void {\n registerFactories(registry, Object.entries(TEXT_FACTORIES));\n registerFactories(registry, Object.entries(IMAGE_FACTORIES));\n registerFactories(registry, getShapeFactories());\n registerFactories(registry, Object.entries(SVG_FACTORIES));\n}\n","import type { Bounds } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\n\nexport function isCanvasConstraintEnabled(ctx: EditorContext): boolean {\n return ctx.options.constrainToCanvas === true;\n}\n\nexport function getCanvasWorldBounds(ctx: EditorContext): Bounds {\n const pixi = ctx.app.getPixiApp();\n const camera = ctx.getExtension<CameraManager>('camera');\n\n if (!camera) {\n return {\n x: 0,\n y: 0,\n width: pixi.screen.width,\n height: pixi.screen.height,\n } as Bounds;\n }\n\n const topLeft = camera.screenToWorld(0, 0);\n const bottomRight = camera.screenToWorld(pixi.screen.width, pixi.screen.height);\n\n return {\n x: topLeft.x,\n y: topLeft.y,\n width: bottomRight.x - topLeft.x,\n height: bottomRight.y - topLeft.y,\n } as Bounds;\n}\n\nexport function screenBoundsToWorldBounds(ctx: EditorContext, bounds: Bounds): Bounds {\n const camera = ctx.getExtension<CameraManager>('camera');\n\n if (!camera) {\n return bounds;\n }\n\n const topLeft = camera.screenToWorld(bounds.x, bounds.y);\n const bottomRight = camera.screenToWorld(bounds.x + bounds.width, bounds.y + bounds.height);\n\n return {\n x: topLeft.x,\n y: topLeft.y,\n width: bottomRight.x - topLeft.x,\n height: bottomRight.y - topLeft.y,\n } as Bounds;\n}\n\nexport function getElementWorldBounds(ctx: EditorContext, el: BaseElement<BaseOptions>): Bounds {\n return screenBoundsToWorldBounds(ctx, el.getDisplayObject().getBounds());\n}\n\nexport function combineBounds(boundsList: readonly Bounds[]): Bounds {\n const [first, ...rest] = boundsList;\n\n if (!first) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n } as Bounds;\n }\n\n let minX = first.x;\n let minY = first.y;\n let maxX = first.x + first.width;\n let maxY = first.y + first.height;\n\n for (const bounds of rest) {\n minX = Math.min(minX, bounds.x);\n minY = Math.min(minY, bounds.y);\n maxX = Math.max(maxX, bounds.x + bounds.width);\n maxY = Math.max(maxY, bounds.y + bounds.height);\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n } as Bounds;\n}\n\nexport function getCombinedElementWorldBounds(\n ctx: EditorContext,\n elements: readonly BaseElement<BaseOptions>[],\n): Bounds {\n return combineBounds(elements.map((el) => getElementWorldBounds(ctx, el)));\n}\n\nexport function clampBoundsDelta(\n bounds: Bounds,\n dx: number,\n dy: number,\n limits: Bounds,\n): { dx: number; dy: number } {\n const nextLeft = bounds.x + dx;\n const nextTop = bounds.y + dy;\n const nextRight = nextLeft + bounds.width;\n const nextBottom = nextTop + bounds.height;\n const limitRight = limits.x + limits.width;\n const limitBottom = limits.y + limits.height;\n\n let clampedDx = dx;\n let clampedDy = dy;\n\n if (bounds.width >= limits.width) {\n clampedDx = limits.x - bounds.x;\n } else {\n if (nextLeft < limits.x) {\n clampedDx += limits.x - nextLeft;\n }\n if (nextRight > limitRight) {\n clampedDx -= nextRight - limitRight;\n }\n }\n\n if (bounds.height >= limits.height) {\n clampedDy = limits.y - bounds.y;\n } else {\n if (nextTop < limits.y) {\n clampedDy += limits.y - nextTop;\n }\n if (nextBottom > limitBottom) {\n clampedDy -= nextBottom - limitBottom;\n }\n }\n\n return { dx: clampedDx, dy: clampedDy };\n}\n\nexport async function constrainElementToCanvas(\n ctx: EditorContext,\n el: BaseElement<BaseOptions>,\n): Promise<boolean> {\n if (!isCanvasConstraintEnabled(ctx)) {\n return false;\n }\n\n const bounds = getElementWorldBounds(ctx, el);\n const limits = getCanvasWorldBounds(ctx);\n const { dx, dy } = clampBoundsDelta(bounds, 0, 0, limits);\n\n if (dx === 0 && dy === 0) {\n return false;\n }\n\n const opts = el.getOptions();\n await el.update({\n x: (opts.x ?? 0) + dx,\n y: (opts.y ?? 0) + dy,\n } as Partial<BaseOptions>);\n\n return true;\n}\n","import type { AlignmentManager } from '@/extensions/alignment/AlignmentManager';\nimport type { AlignmentAccessor } from '@/extensions/alignment/types';\n\nexport function createAlignmentAccessor(\n getManager: () => AlignmentManager | undefined,\n): AlignmentAccessor {\n return {\n align: (mode, ids) => getManager()?.align(mode, ids) ?? Promise.resolve(),\n };\n}\n","import type { Command } from '@/extensions/history/commands/Command';\nimport type { HistoryTrack } from '@/extensions/history/types';\n\nexport class CompositeCommand implements Command {\n constructor(\n readonly description: string,\n readonly kind: HistoryTrack,\n private readonly commands: readonly Command[],\n ) {}\n\n async execute(): Promise<void> {\n for (const command of this.commands) {\n await command.execute();\n }\n }\n\n async undo(): Promise<void> {\n for (let i = this.commands.length - 1; i >= 0; i--) {\n await this.commands[i]?.undo();\n }\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\nimport type { HistoryTrack } from '@/extensions/history/types';\n\nexport class UpdateCommand implements Command {\n readonly description = 'Update element';\n\n static create(\n ctx: EditorContext,\n id: string,\n kind: Exclude<HistoryTrack, 'add' | 'remove'>,\n before: BaseOptions,\n after: Partial<BaseOptions>,\n ): UpdateCommand | null {\n const patches = UpdateCommand.buildPatches(before, after);\n if (!patches) {\n return null;\n }\n\n return new UpdateCommand(ctx, id, kind, patches.reverse, patches.diff);\n }\n\n static createFromSnapshot(\n ctx: EditorContext,\n id: string,\n kind: Exclude<HistoryTrack, 'add' | 'remove'>,\n snapshot: Partial<BaseOptions>,\n current: BaseOptions | undefined,\n after: BaseOptions,\n ): UpdateCommand | null {\n const before = UpdateCommand.mergeSnapshot(id, snapshot, current);\n return UpdateCommand.create(ctx, id, kind, before, after);\n }\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly id: string,\n readonly kind: Exclude<HistoryTrack, 'add' | 'remove'>,\n private readonly before: Partial<BaseOptions>,\n private readonly after: Partial<BaseOptions>,\n ) {}\n\n async execute(): Promise<void> {\n const el = this.ctx.registry.get(this.id);\n if (el) {\n await el.update(this.after);\n this.ctx.events.emit('element:updated', this.id);\n }\n }\n\n async undo(): Promise<void> {\n const el = this.ctx.registry.get(this.id);\n if (el) {\n await el.update(this.before);\n this.ctx.events.emit('element:updated', this.id);\n }\n }\n\n private static buildPatches(\n before: BaseOptions,\n after: Partial<BaseOptions>,\n ): { diff: Partial<BaseOptions>; reverse: Partial<BaseOptions> } | null {\n const diff: Partial<BaseOptions> = {};\n\n for (const [key, value] of Object.entries(after) as Array<\n [keyof BaseOptions, BaseOptions[keyof BaseOptions]]\n >) {\n if (key === 'id' || key === 'type') {\n continue;\n }\n\n if (before[key] !== value) {\n diff[key] = value as never;\n }\n }\n\n if (Object.keys(diff).length === 0) {\n return null;\n }\n\n const reverse: Record<string, unknown> = {};\n for (const key of Object.keys(diff) as Array<keyof BaseOptions>) {\n reverse[key] = before[key];\n }\n\n return {\n diff,\n reverse: reverse as Partial<BaseOptions>,\n };\n }\n\n private static mergeSnapshot(\n id: string,\n snapshot: Partial<BaseOptions>,\n current?: BaseOptions,\n ): BaseOptions {\n return {\n ...(current ?? { id, type: '' }),\n ...snapshot,\n };\n }\n}\n","import type { Bounds } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { combineBounds, getCanvasWorldBounds, getElementWorldBounds } from '@/core/canvasBounds';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { createAlignmentAccessor } from '@/extensions/alignment/accessor';\nimport type { AlignmentMode } from '@/extensions/alignment/types';\nimport type { Extension } from '@/extensions/Extension';\nimport { CompositeCommand } from '@/extensions/history/commands/CompositeCommand';\nimport { UpdateCommand } from '@/extensions/history/commands/UpdateCommand';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\n\ntype ElementWithBounds = {\n element: BaseElement<BaseOptions>;\n bounds: Bounds;\n};\n\nexport class AlignmentManager implements Extension {\n readonly name = 'alignment';\n accessors?: { alignment: ReturnType<typeof createAlignmentAccessor> };\n private ctx!: EditorContext;\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n alignment: createAlignmentAccessor(\n () => ctx.getExtension<AlignmentManager>('alignment') as AlignmentManager | undefined,\n ),\n };\n }\n\n async align(mode: AlignmentMode, ids?: readonly string[]): Promise<void> {\n const targetElements = this.getTargetElements(ids);\n const targets = targetElements.map((element) => ({\n element,\n bounds: getElementWorldBounds(this.ctx, element),\n }));\n if (targets.length === 0) {\n return;\n }\n\n const referenceBounds = this.getReferenceBounds(targets);\n const updates = targets\n .map(({ element, bounds }) => {\n const patch = this.getAlignmentPatch(mode, bounds, referenceBounds, element.getOptions());\n if (!patch) {\n return null;\n }\n\n return {\n element,\n patch,\n };\n })\n .filter(\n (item): item is { element: BaseElement<BaseOptions>; patch: Partial<BaseOptions> } =>\n item !== null,\n );\n\n if (updates.length === 0) {\n return;\n }\n\n const history = this.getHistoryManager();\n if (!history?.shouldTrack('align')) {\n for (const { element, patch } of updates) {\n await element.update(patch);\n this.ctx.events.emit('element:updated', element.getId());\n }\n return;\n }\n\n const commands = updates\n .map(({ element, patch }) =>\n UpdateCommand.create(this.ctx, element.getId(), 'align', element.getOptions(), patch),\n )\n .filter((command): command is UpdateCommand => command !== null);\n\n if (commands.length === 0) {\n return;\n }\n\n await history.execute(new CompositeCommand('Align objects', 'align', commands));\n }\n\n private getTargetElements(ids?: readonly string[]): BaseElement<BaseOptions>[] {\n const targetIds =\n ids && ids.length > 0\n ? [...ids]\n : (this.ctx.getExtension<InteractionManager>('interaction')?.getSelectedIds() ?? []);\n\n return targetIds\n .map((id) => this.ctx.registry.get(id))\n .filter((element): element is BaseElement<BaseOptions> => Boolean(element));\n }\n\n private getReferenceBounds(targets: readonly ElementWithBounds[]): Bounds {\n if (targets.length === 1) {\n return getCanvasWorldBounds(this.ctx);\n }\n\n return combineBounds(targets.map((item) => item.bounds));\n }\n\n private getAlignmentPatch(\n mode: AlignmentMode,\n bounds: Bounds,\n groupBounds: Bounds,\n options: BaseOptions,\n ): Partial<BaseOptions> | null {\n const next: Partial<BaseOptions> = {};\n\n if (mode === 'left' || mode === 'center' || mode === 'right') {\n const currentAnchorX = this.getAnchorX(mode, bounds);\n const targetAnchorX = this.getAnchorX(mode, groupBounds);\n const dx = targetAnchorX - currentAnchorX;\n if (dx !== 0) {\n next.x = (options.x ?? 0) + dx;\n }\n }\n\n if (mode === 'top' || mode === 'middle' || mode === 'bottom') {\n const currentAnchorY = this.getAnchorY(mode, bounds);\n const targetAnchorY = this.getAnchorY(mode, groupBounds);\n const dy = targetAnchorY - currentAnchorY;\n if (dy !== 0) {\n next.y = (options.y ?? 0) + dy;\n }\n }\n\n return Object.keys(next).length > 0 ? next : null;\n }\n\n private getAnchorX(mode: 'left' | 'center' | 'right', bounds: Bounds): number {\n if (mode === 'left') return bounds.x;\n if (mode === 'right') return bounds.x + bounds.width;\n return bounds.x + bounds.width / 2;\n }\n\n private getAnchorY(mode: 'top' | 'middle' | 'bottom', bounds: Bounds): number {\n if (mode === 'top') return bounds.y;\n if (mode === 'bottom') return bounds.y + bounds.height;\n return bounds.y + bounds.height / 2;\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.ctx.getExtension<HistoryManager>('history');\n }\n}\n","import type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { CameraAccessor } from '@/extensions/camera/types';\n\nexport function createCameraAccessor(getManager: () => CameraManager | undefined): CameraAccessor {\n return {\n getState: () => getManager()?.getState() ?? { zoom: 1, x: 0, y: 0 },\n setState: (next) => getManager()?.setState(next),\n setZoom: (zoom, anchorX, anchorY) => getManager()?.setZoom(zoom, anchorX, anchorY),\n screenToWorld: (screenX, screenY) =>\n getManager()?.screenToWorld(screenX, screenY) ?? { x: 0, y: 0 },\n worldToScreen: (worldX, worldY) =>\n getManager()?.worldToScreen(worldX, worldY) ?? { x: 0, y: 0 },\n };\n}\n","type KeyHandler = (event: KeyboardEvent) => void;\n\nexport class KeyboardShortcuts {\n private readonly listeners = new Map<string, KeyHandler>();\n private readonly boundHandler: (e: KeyboardEvent) => void;\n\n constructor(private readonly target: HTMLElement) {\n this.boundHandler = this.handleKeyDown.bind(this);\n target.addEventListener('keydown', this.boundHandler);\n }\n\n register(combo: string, handler: KeyHandler): void {\n this.listeners.set(combo.toLowerCase(), handler);\n }\n\n unregister(combo: string): void {\n this.listeners.delete(combo.toLowerCase());\n }\n\n destroy(): void {\n this.target.removeEventListener('keydown', this.boundHandler);\n this.listeners.clear();\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n const key = event.key.toLowerCase();\n const ctrl = event.ctrlKey || event.metaKey;\n const shift = event.shiftKey;\n\n const combos: string[] = [key];\n if (ctrl && shift) combos.push(`ctrl+shift+${key}`);\n else if (ctrl) combos.push(`ctrl+${key}`);\n else if (shift) combos.push(`shift+${key}`);\n\n for (const combo of combos) {\n const handler = this.listeners.get(combo);\n if (handler) {\n event.preventDefault();\n handler(event);\n return;\n }\n }\n }\n}\n","import { KeyboardShortcuts } from '@/core/KeyboardShortcuts';\n\n// Multiplicative factor per wheel tick — feels natural across zoom levels\nconst WHEEL_FACTOR = 1.08;\n\ntype Anchor = { x: number; y: number };\n\ntype ZoomHandler = (zoom: number, anchorX: number, anchorY: number) => void;\n\ntype PanBindings = {\n canvas: HTMLCanvasElement;\n getPanModifierActive(): boolean;\n setPanModifierActive(active: boolean): void;\n getPanning(): boolean;\n setPanning(active: boolean): void;\n getWorldPosition(): Anchor;\n setWorldPosition(x: number, y: number): void;\n};\n\nexport function createCameraShortcuts(\n canvas: HTMLCanvasElement,\n handlers: {\n zoomIn(): void;\n zoomOut(): void;\n reset(): void;\n },\n): KeyboardShortcuts {\n const shortcuts = new KeyboardShortcuts(canvas);\n shortcuts.register('+', handlers.zoomIn);\n shortcuts.register('=', handlers.zoomIn);\n shortcuts.register('-', handlers.zoomOut);\n shortcuts.register('0', handlers.reset);\n return shortcuts;\n}\n\nexport function attachWheelZoom(\n canvas: HTMLCanvasElement,\n enabled: boolean,\n getZoom: () => number,\n applyZoom: ZoomHandler,\n): () => void {\n if (!enabled) {\n return () => {};\n }\n\n const onWheel = (e: WheelEvent) => {\n e.preventDefault();\n const rect = canvas.getBoundingClientRect();\n const cx = e.clientX - rect.left;\n const cy = e.clientY - rect.top;\n const factor = e.deltaY < 0 ? WHEEL_FACTOR : 1 / WHEEL_FACTOR;\n applyZoom(getZoom() * factor, cx, cy);\n };\n\n canvas.addEventListener('wheel', onWheel, { passive: false });\n return () => canvas.removeEventListener('wheel', onWheel);\n}\n\nexport function attachPinchZoom(\n canvas: HTMLCanvasElement,\n getZoom: () => number,\n applyZoom: ZoomHandler,\n): Array<() => void> {\n let startDist = 0;\n let startZoom = 1;\n let anchorX = 0;\n let anchorY = 0;\n\n const distanceBetweenTouches = (touches: TouchList) => {\n const touch0 = touches[0];\n const touch1 = touches[1];\n if (!touch0 || !touch1) return 0;\n const dx = touch1.clientX - touch0.clientX;\n const dy = touch1.clientY - touch0.clientY;\n return Math.sqrt(dx * dx + dy * dy);\n };\n\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length !== 2) return;\n e.preventDefault();\n startDist = distanceBetweenTouches(e.touches);\n startZoom = getZoom();\n const rect = canvas.getBoundingClientRect();\n const touch0 = e.touches[0];\n const touch1 = e.touches[1];\n if (!touch0 || !touch1) return;\n anchorX = (touch0.clientX + touch1.clientX) / 2 - rect.left;\n anchorY = (touch0.clientY + touch1.clientY) / 2 - rect.top;\n };\n\n const onTouchMove = (e: TouchEvent) => {\n if (e.touches.length !== 2 || startDist === 0) return;\n e.preventDefault();\n const scale = distanceBetweenTouches(e.touches) / startDist;\n applyZoom(startZoom * scale, anchorX, anchorY);\n };\n\n canvas.addEventListener('touchstart', onTouchStart, { passive: false });\n canvas.addEventListener('touchmove', onTouchMove, { passive: false });\n\n return [\n () => canvas.removeEventListener('touchstart', onTouchStart),\n () => canvas.removeEventListener('touchmove', onTouchMove),\n ];\n}\n\nexport function attachPanControls(bindings: PanBindings): Array<() => void> {\n const { canvas } = bindings;\n let panStartX = 0;\n let panStartY = 0;\n let panOriginX = 0;\n let panOriginY = 0;\n\n const updateCursor = () => {\n canvas.style.cursor = bindings.getPanning()\n ? 'grabbing'\n : bindings.getPanModifierActive()\n ? 'grab'\n : '';\n };\n\n const stopPan = () => {\n bindings.setPanning(false);\n updateCursor();\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== ' ') return;\n e.preventDefault();\n if (!bindings.getPanModifierActive()) {\n bindings.setPanModifierActive(true);\n updateCursor();\n }\n };\n\n const onKeyUp = (e: KeyboardEvent) => {\n if (e.key !== ' ') return;\n bindings.setPanModifierActive(false);\n stopPan();\n };\n\n const onBlur = () => {\n bindings.setPanModifierActive(false);\n stopPan();\n };\n\n const onPointerDown = (e: PointerEvent) => {\n canvas.focus();\n if (e.button !== 0 || !bindings.getPanModifierActive()) return;\n e.preventDefault();\n bindings.setPanning(true);\n panStartX = e.clientX;\n panStartY = e.clientY;\n const worldPosition = bindings.getWorldPosition();\n panOriginX = worldPosition.x;\n panOriginY = worldPosition.y;\n updateCursor();\n };\n\n const onPointerMove = (e: PointerEvent) => {\n if (!bindings.getPanning()) return;\n bindings.setWorldPosition(\n panOriginX + (e.clientX - panStartX),\n panOriginY + (e.clientY - panStartY),\n );\n };\n\n canvas.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', onBlur);\n canvas.addEventListener('pointerdown', onPointerDown);\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopPan);\n window.addEventListener('pointercancel', stopPan);\n\n return [\n () => canvas.removeEventListener('keydown', onKeyDown),\n () => window.removeEventListener('keyup', onKeyUp),\n () => window.removeEventListener('blur', onBlur),\n () => canvas.removeEventListener('pointerdown', onPointerDown),\n () => window.removeEventListener('pointermove', onPointerMove),\n () => window.removeEventListener('pointerup', stopPan),\n () => window.removeEventListener('pointercancel', stopPan),\n ];\n}\n","import { type Container, Point } from 'pixi.js';\nimport type { CameraPoint } from '@/extensions/camera/types';\n\nexport function screenToWorldPoint(\n worldContainer: Container,\n screenX: number,\n screenY: number,\n): CameraPoint {\n const point = worldContainer.toLocal(new Point(screenX, screenY));\n return { x: point.x, y: point.y };\n}\n\nexport function worldToScreenPoint(\n worldContainer: Container,\n worldX: number,\n worldY: number,\n): CameraPoint {\n const point = worldContainer.toGlobal(new Point(worldX, worldY));\n return { x: point.x, y: point.y };\n}\n","import { Container } from 'pixi.js';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraState } from '@/core/Events';\nimport { createCameraAccessor } from '@/extensions/camera/accessor';\nimport {\n attachPanControls,\n attachPinchZoom,\n attachWheelZoom,\n createCameraShortcuts,\n} from '@/extensions/camera/CameraControls';\nimport { screenToWorldPoint, worldToScreenPoint } from '@/extensions/camera/CameraTransforms';\nimport type { CameraConfig } from '@/extensions/camera/types';\nimport type { Extension } from '@/extensions/Extension';\n\nconst DEFAULTS: Required<CameraConfig> = {\n zoom: 1,\n minZoom: 0.1,\n maxZoom: 20,\n zoomStep: 0.1,\n wheelZoom: true,\n};\n\nexport class CameraManager implements Extension {\n readonly name = 'camera';\n accessors?: { camera: ReturnType<typeof createCameraAccessor> };\n private cfg: Required<CameraConfig>;\n private ctx!: EditorContext;\n readonly worldContainer: Container;\n private zoom: number;\n private shortcuts?: ReturnType<typeof createCameraShortcuts>;\n private panModifierActive = false;\n private panning = false;\n private cleanupFns: Array<() => void> = [];\n\n constructor(config: CameraConfig = {}) {\n this.cfg = { ...DEFAULTS, ...config };\n this.zoom = this.cfg.zoom;\n this.worldContainer = new Container();\n this.worldContainer.label = 'world';\n this.worldContainer.sortableChildren = true;\n this.worldContainer.zIndex = 0;\n }\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n camera: createCameraAccessor(() => ctx.getExtension<CameraManager>('camera')),\n };\n const pixi = ctx.app.getPixiApp();\n\n pixi.stage.addChild(this.worldContainer);\n\n const onElementAdded = (id: string) => {\n const el = ctx.registry.get(id);\n if (!el) return;\n const dObj = el.getDisplayObject();\n // addChild auto-removes from previous parent in PixiJS v8\n if (dObj.parent !== this.worldContainer) {\n this.worldContainer.addChild(dObj);\n }\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n\n this.setupKeyboard();\n this.setupWheel();\n this.setupPinch();\n this.setupPan();\n\n if (this.zoom !== 1) {\n const cx = pixi.screen.width / 2;\n const cy = pixi.screen.height / 2;\n this.applyZoom(this.zoom, cx, cy);\n }\n }\n\n // ─── Public API ───────────────────────────────────────────────────────────\n\n getZoom(): number {\n return this.zoom;\n }\n\n isPanModifierActive(): boolean {\n return this.panModifierActive;\n }\n\n isPanning(): boolean {\n return this.panning;\n }\n\n getState(): CameraState {\n return { zoom: this.zoom, x: this.worldContainer.x, y: this.worldContainer.y };\n }\n\n setState(next: Partial<CameraState>): void {\n const zoom = next.zoom ?? this.zoom;\n const clampedZoom = Math.min(this.cfg.maxZoom, Math.max(this.cfg.minZoom, zoom));\n this.zoom = clampedZoom;\n this.worldContainer.scale.set(clampedZoom);\n this.setWorldPosition(next.x ?? this.worldContainer.x, next.y ?? this.worldContainer.y);\n }\n\n setZoom(zoom: number, anchorX?: number, anchorY?: number): void {\n const pixi = this.ctx.app.getPixiApp();\n this.applyZoom(zoom, anchorX ?? pixi.screen.width / 2, anchorY ?? pixi.screen.height / 2);\n }\n\n screenToWorld(screenX: number, screenY: number): { x: number; y: number } {\n return screenToWorldPoint(this.worldContainer, screenX, screenY);\n }\n\n worldToScreen(worldX: number, worldY: number): { x: number; y: number } {\n return worldToScreenPoint(this.worldContainer, worldX, worldY);\n }\n\n // ─── Internals ────────────────────────────────────────────────────────────\n\n private applyZoom(newZoom: number, anchorX: number, anchorY: number, emit = true): void {\n const clamped = Math.min(this.cfg.maxZoom, Math.max(this.cfg.minZoom, newZoom));\n const worldAnchor = this.screenToWorld(anchorX, anchorY);\n\n this.zoom = clamped;\n this.worldContainer.scale.set(clamped);\n const anchorAfterZoom = this.worldToScreen(worldAnchor.x, worldAnchor.y);\n this.setWorldPosition(\n this.worldContainer.x + (anchorX - anchorAfterZoom.x),\n this.worldContainer.y + (anchorY - anchorAfterZoom.y),\n emit,\n );\n }\n\n private setWorldPosition(x: number, y: number, emit = true): void {\n this.worldContainer.position.set(x, y);\n if (emit) {\n this.emitChanged();\n }\n }\n\n private emitChanged(): void {\n this.ctx.events.emit('camera:changed', this.getState());\n }\n\n private setupKeyboard(): void {\n const canvas = this.ctx.app.getCanvas();\n this.shortcuts = createCameraShortcuts(canvas, {\n zoomIn: () => this.stepZoom(1),\n zoomOut: () => this.stepZoom(-1),\n reset: () => this.setState({ zoom: 1, x: 0, y: 0 }),\n });\n }\n\n private setupWheel(): void {\n const canvas = this.ctx.app.getCanvas();\n this.cleanupFns.push(\n attachWheelZoom(\n canvas,\n this.cfg.wheelZoom,\n () => this.zoom,\n (zoom, anchorX, anchorY) => this.applyZoom(zoom, anchorX, anchorY),\n ),\n );\n }\n\n private setupPinch(): void {\n const canvas = this.ctx.app.getCanvas();\n this.cleanupFns.push(\n ...attachPinchZoom(\n canvas,\n () => this.zoom,\n (zoom, anchorX, anchorY) => this.applyZoom(zoom, anchorX, anchorY),\n ),\n );\n }\n\n private setupPan(): void {\n const canvas = this.ctx.app.getCanvas();\n this.cleanupFns.push(\n ...attachPanControls({\n canvas,\n getPanModifierActive: () => this.panModifierActive,\n setPanModifierActive: (active) => {\n this.panModifierActive = active;\n },\n getPanning: () => this.panning,\n setPanning: (active) => {\n this.panning = active;\n },\n getWorldPosition: () => ({ x: this.worldContainer.x, y: this.worldContainer.y }),\n setWorldPosition: (x, y) => this.setWorldPosition(x, y),\n }),\n );\n }\n\n private stepZoom(direction: 1 | -1, anchorX?: number, anchorY?: number): void {\n const factor = 1 + this.cfg.zoomStep;\n const nextZoom = direction > 0 ? this.zoom * factor : this.zoom / factor;\n this.setZoom(nextZoom, anchorX, anchorY);\n }\n\n destroy(): void {\n this.shortcuts?.destroy();\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n // worldContainer children are elements managed by EditorKit; app.destroy() cleans them up\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementRegistry } from '@/core/ElementRegistry';\n\nexport function buildDuplicateOptions(\n snapshots: readonly BaseOptions[],\n nextZIndex: number,\n): BaseOptions[] {\n const duplicates = snapshots.map((options) => ({\n ...options,\n id: `${options.id}_dup_${crypto.randomUUID()}`,\n x: (options.x ?? 0) + 10,\n y: (options.y ?? 0) + 10,\n }));\n\n let currentZIndex = nextZIndex;\n for (const duplicate of duplicates) {\n duplicate.zIndex = currentZIndex++;\n }\n\n return duplicates;\n}\n\nexport function getMaxElementZIndex(registry: ElementRegistry): number {\n let maxZIndex = 0;\n for (const element of registry.getAll().values()) {\n maxZIndex = Math.max(maxZIndex, element.getDisplayObject().zIndex);\n }\n return maxZIndex;\n}\n","import type { ContextMenuManager } from '@/extensions/contextMenu/ContextMenuManager';\nimport type { ContextMenuAccessor } from '@/extensions/contextMenu/types';\n\nexport function createContextMenuAccessor(\n getManager: () => ContextMenuManager | undefined,\n): ContextMenuAccessor {\n return {\n open: (id, options) => {\n getManager()?.open(id, options);\n },\n close: () => {\n getManager()?.close();\n },\n };\n}\n","import type { ContextMenuEvent } from '@/extensions/contextMenu/types';\n\nfunction getDefaultItems(ctx: ContextMenuEvent): Array<{ label: string; action?: () => void }> {\n return [\n { label: 'Duplicate', action: ctx.actions.duplicate },\n { label: 'Delete', action: ctx.actions.delete },\n { label: 'separator' },\n { label: 'Bring to Front', action: ctx.actions.bringToFront },\n { label: 'Bring Forward', action: ctx.actions.bringForward },\n { label: 'Send Backward', action: ctx.actions.sendBackward },\n { label: 'Send to Back', action: ctx.actions.sendToBack },\n { label: 'separator' },\n { label: 'Normalize z-Index', action: ctx.actions.normalizeZIndex },\n ];\n}\n\nexport function renderDefaultContextMenu(ctx: ContextMenuEvent): HTMLElement {\n const menu = document.createElement('div');\n menu.style.cssText = `\n position: fixed;\n left: ${ctx.position.x}px;\n top: ${ctx.position.y}px;\n background: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.15);\n padding: 4px 0;\n z-index: 9999;\n min-width: 160px;\n font-family: sans-serif;\n font-size: 13px;\n `;\n\n for (const item of getDefaultItems(ctx)) {\n const element = document.createElement('div');\n if (item.label === 'separator') {\n element.style.cssText = 'border-top: 1px solid #eee; margin: 4px 0;';\n } else {\n element.textContent = item.label;\n element.style.cssText = 'padding: 6px 16px; cursor: pointer; color: #222;';\n element.addEventListener('mouseenter', () => {\n element.style.background = '#f0f0f0';\n });\n element.addEventListener('mouseleave', () => {\n element.style.background = '';\n });\n element.addEventListener('click', (event) => {\n event.stopPropagation();\n item.action?.();\n });\n }\n menu.appendChild(element);\n }\n\n document.body.appendChild(menu);\n clampMenuToViewport(menu, ctx.position);\n return menu;\n}\n\nfunction clampMenuToViewport(menu: HTMLElement, position: { x: number; y: number }): void {\n const rect = menu.getBoundingClientRect();\n if (rect.right > window.innerWidth) {\n menu.style.left = `${position.x - rect.width}px`;\n }\n if (rect.bottom > window.innerHeight) {\n menu.style.top = `${position.y - rect.height}px`;\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\n\nexport class AddCommand implements Command {\n readonly description = 'Add element';\n readonly kind = 'add' as const;\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly snapshots: readonly BaseOptions[],\n ) {}\n\n async execute(): Promise<void> {\n for (const opts of this.snapshots) {\n const el = this.ctx.registry.createFromOptions(opts);\n await this.ctx.addElement(el);\n }\n }\n\n async undo(): Promise<void> {\n for (const opts of this.snapshots) {\n this.ctx.removeElement(opts.id);\n }\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\n\nexport class RemoveCommand implements Command {\n readonly description = 'Remove element';\n readonly kind = 'remove' as const;\n private snapshots: BaseOptions[] = [];\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly ids: readonly string[],\n ) {}\n\n async execute(): Promise<void> {\n this.snapshots = [];\n for (const id of this.ids) {\n const el = this.ctx.registry.get(id);\n if (el) this.snapshots.push({ ...el.getOptions() });\n this.ctx.removeElement(id);\n }\n }\n\n async undo(): Promise<void> {\n for (const opts of this.snapshots) {\n const el = this.ctx.registry.createFromOptions(opts);\n await this.ctx.addElement(el);\n }\n }\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { buildDuplicateOptions, getMaxElementZIndex } from '@/core/duplicateOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { createContextMenuAccessor } from '@/extensions/contextMenu/accessor';\nimport { renderDefaultContextMenu } from '@/extensions/contextMenu/MenuRenderer';\nimport type { ContextMenuEvent, ContextMenuOpenOptions } from '@/extensions/contextMenu/types';\nimport type { Extension } from '@/extensions/Extension';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport { RemoveCommand } from '@/extensions/history/commands/RemoveCommand';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\nimport type { LayerManager } from '@/extensions/layering/LayerManager';\nimport type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializedElement } from '@/extensions/serialization/types';\n\nexport class ContextMenuManager implements Extension {\n readonly name = 'contextMenu';\n accessors?: { contextMenu: ReturnType<typeof createContextMenuAccessor> };\n private ctx!: EditorContext;\n private menuEl: HTMLElement | null = null;\n private cleanupFns: Array<() => void> = [];\n private readonly elementListeners = new Map<\n string,\n {\n displayObject: {\n on(event: 'pointerdown' | 'rightclick', handler: (e: FederatedPointerEvent) => void): void;\n off(event: 'pointerdown' | 'rightclick', handler: (e: FederatedPointerEvent) => void): void;\n };\n onPointerDown: (e: FederatedPointerEvent) => void;\n onRightClick: (e: FederatedPointerEvent) => void;\n }\n >();\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n contextMenu: createContextMenuAccessor(() =>\n ctx.getExtension<ContextMenuManager>('contextMenu'),\n ),\n };\n\n const canvas = ctx.app.getCanvas();\n const onCanvasContextMenu = (e: MouseEvent) => {\n e.preventDefault();\n };\n canvas.addEventListener('contextmenu', onCanvasContextMenu);\n this.cleanupFns.push(() => canvas.removeEventListener('contextmenu', onCanvasContextMenu));\n\n const onElementAdded = (id: string) => {\n this.syncElementListeners(id);\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n\n const onElementUpdated = (id: string) => {\n this.syncElementListeners(id);\n };\n ctx.events.on('element:updated', onElementUpdated);\n this.cleanupFns.push(() => ctx.events.off('element:updated', onElementUpdated));\n\n const onElementRemoved = (id: string) => {\n this.detachElementListeners(id);\n };\n ctx.events.on('element:removed', onElementRemoved);\n this.cleanupFns.push(() => ctx.events.off('element:removed', onElementRemoved));\n\n const onDocumentClick = () => this.close();\n const onDocumentKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') this.close();\n };\n document.addEventListener('click', onDocumentClick);\n document.addEventListener('keydown', onDocumentKeyDown);\n this.cleanupFns.push(\n () => document.removeEventListener('click', onDocumentClick),\n () => document.removeEventListener('keydown', onDocumentKeyDown),\n );\n }\n\n open(id: string, options: ContextMenuOpenOptions): void {\n this.close();\n\n const el = this.ctx.registry.get(id);\n if (!el) return;\n\n const targetIds = this.resolveTargetIds(id);\n const selected = targetIds.map((targetId) => this.serializeElement(targetId));\n const originalEvent =\n options.originalEvent ??\n new MouseEvent('contextmenu', {\n clientX: options.position.x,\n clientY: options.position.y,\n });\n\n const actions = {\n delete: () => {\n const history = this.ctx.getExtension<HistoryManager>('history');\n if (history) {\n void history.execute(new RemoveCommand(this.ctx, [...targetIds]));\n } else {\n for (const targetId of targetIds) this.ctx.removeElement(targetId);\n }\n this.close();\n },\n duplicate: () => {\n void this.duplicateElements(targetIds);\n this.close();\n },\n bringToFront: () => {\n this.getLayerManager()?.bringToFront([...targetIds]);\n this.close();\n },\n sendToBack: () => {\n this.getLayerManager()?.sendToBack([...targetIds]);\n this.close();\n },\n bringForward: () => {\n this.getLayerManager()?.bringForward(targetIds[0] ?? '');\n this.close();\n },\n sendBackward: () => {\n this.getLayerManager()?.sendBackward(targetIds[0] ?? '');\n this.close();\n },\n normalizeZIndex: () => {\n this.getLayerManager()?.normalizeZIndex();\n this.close();\n },\n };\n\n const payload: ContextMenuEvent = {\n selected,\n position: options.position,\n originalEvent,\n actions,\n };\n\n const contextMenuConfig =\n typeof this.ctx.options.extensions?.contextMenu === 'object'\n ? this.ctx.options.extensions.contextMenu\n : undefined;\n const userHandler = contextMenuConfig?.onElement;\n if (userHandler) {\n userHandler(payload);\n return;\n }\n\n this.menuEl = renderDefaultContextMenu(payload);\n }\n\n close(): void {\n if (this.menuEl) {\n this.menuEl.remove();\n this.menuEl = null;\n }\n }\n\n private getLayerManager(): LayerManager | undefined {\n return this.ctx.getExtension<LayerManager>('layering');\n }\n\n private getInteractionManager(): InteractionManager | undefined {\n return this.ctx.getExtension<InteractionManager>('interaction');\n }\n\n private resolveTargetIds(id: string): string[] {\n const interaction = this.getInteractionManager();\n const selectedIds = interaction ? [...interaction.getSelectedIds()] : [];\n if (!selectedIds.includes(id)) {\n interaction?.select(id);\n return [id];\n }\n return selectedIds.length ? selectedIds : [id];\n }\n\n private async duplicateElements(ids: readonly string[]): Promise<void> {\n const snapshots = ids\n .map((id) => this.ctx.registry.get(id)?.getOptions())\n .filter((options): options is BaseOptions => options !== undefined)\n .sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0));\n if (!snapshots.length) {\n return;\n }\n\n const duplicates = buildDuplicateOptions(snapshots, getMaxElementZIndex(this.ctx.registry) + 1);\n\n const history = this.ctx.getExtension<HistoryManager>('history');\n if (history) {\n await history.execute(new AddCommand(this.ctx, duplicates));\n } else {\n for (const duplicate of duplicates) {\n await this.ctx.addElement(this.ctx.registry.createFromOptions(duplicate));\n }\n }\n\n this.getInteractionManager()?.select(duplicates.map((duplicate) => duplicate.id));\n }\n private serializeElement(id: string): SerializedElement {\n const element = this.ctx.registry.get(id);\n const serializer = this.ctx.getExtension<SerializationManager>('serialization');\n if (!element) {\n return { id, type: 'shape:rectangle' };\n }\n\n return serializer?.serialize(element) ?? (element.getOptions() as SerializedElement);\n }\n\n private detachElementListeners(id: string): void {\n const listenerSet = this.elementListeners.get(id);\n if (!listenerSet) return;\n\n listenerSet.displayObject.off('pointerdown', listenerSet.onPointerDown);\n listenerSet.displayObject.off('rightclick', listenerSet.onRightClick);\n this.elementListeners.delete(id);\n }\n\n private syncElementListeners(id: string): void {\n const element = this.ctx.registry.get(id);\n if (!element || element.getOptions().selectable === false) {\n this.detachElementListeners(id);\n return;\n }\n if (this.elementListeners.has(id)) {\n return;\n }\n\n const displayObject = element.getDisplayObject();\n const openFromPointer = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const nativeEvent = e.nativeEvent as MouseEvent;\n this.open(id, {\n position: { x: nativeEvent.clientX, y: nativeEvent.clientY },\n originalEvent: nativeEvent,\n });\n };\n const onPointerDown = (e: FederatedPointerEvent) => {\n if (e.button !== 2) return;\n openFromPointer(e);\n };\n const onRightClick = (e: FederatedPointerEvent) => {\n openFromPointer(e);\n };\n\n displayObject.on('pointerdown', onPointerDown);\n displayObject.on('rightclick', onRightClick);\n this.elementListeners.set(id, { displayObject, onPointerDown, onRightClick });\n }\n\n destroy(): void {\n this.close();\n for (const id of this.elementListeners.keys()) {\n this.detachElementListeners(id);\n }\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n }\n}\n","import type { ExportManager } from '@/extensions/export/ExportManager';\nimport type { ExportAccessor, ExportOptions } from '@/extensions/export/types';\n\nexport function createExportAccessor(getManager: () => ExportManager | undefined): ExportAccessor {\n return {\n render: async (format, options?: ExportOptions) => {\n const exportManager = getManager();\n if (!exportManager) {\n throw new Error('Export extension is disabled');\n }\n return exportManager.render(format, options);\n },\n };\n}\n","import { Rectangle } from 'pixi.js';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createExportAccessor } from '@/extensions/export/accessor';\nimport type { ExportMode, ExportOptions, ExportQuality } from '@/extensions/export/types';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\n\ntype ExportFormat = 'png' | 'base64';\n\ntype ExportCanvas = {\n toDataURL(type?: string): string;\n toBlob(callback: BlobCallback, type?: string): void;\n};\n\ntype RectLike = { x: number; y: number; width: number; height: number };\n\nexport class ExportManager implements Extension {\n readonly name = 'export';\n accessors?: { export: ReturnType<typeof createExportAccessor> };\n private ctx!: EditorContext;\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n export: createExportAccessor(() => ctx.getExtension<ExportManager>('export')),\n };\n }\n\n async render(format: ExportFormat, options: ExportOptions = {}): Promise<Blob | string> {\n if (format === 'base64') {\n return await this.withHiddenOverlay(async () =>\n this.renderBase64(this.extractCanvas(options)),\n );\n }\n\n if (format === 'png') {\n return await this.withHiddenOverlay(async () => this.renderPng(this.extractCanvas(options)));\n }\n\n throw new Error(`Unknown export format: \"${format}\"`);\n }\n\n private async withHiddenOverlay<T>(work: () => Promise<T> | T): Promise<T> {\n const interaction = this.ctx.getExtension<InteractionManager>('interaction');\n interaction?.setOverlayVisible(false);\n\n try {\n return await work();\n } finally {\n interaction?.setOverlayVisible(true);\n }\n }\n\n private extractCanvas(options: ExportOptions): ExportCanvas {\n const pixiApp = this.ctx.app.getPixiApp();\n const canvas = pixiApp.renderer.extract.canvas({\n target: pixiApp.stage,\n frame: this.getExportFrame(options.mode ?? 'content', options.margin ?? 0),\n resolution: this.getExportResolution(options),\n clearColor: options.backgroundColor ?? this.ctx.options.backgroundColor ?? 'transparent',\n antialias: options.antialias ?? true,\n });\n\n if (!canvas.toDataURL || !canvas.toBlob) {\n throw new Error('Extracted canvas does not support export methods');\n }\n\n return {\n toDataURL: (type) => canvas.toDataURL?.(type) ?? '',\n toBlob: (callback, type) => {\n canvas.toBlob?.(callback, type);\n },\n };\n }\n\n private getExportResolution(options: ExportOptions): number {\n if (typeof options.resolution === 'number') {\n return Math.max(1, options.resolution);\n }\n\n return this.getQualityResolution(options.quality ?? 'standard');\n }\n\n private getQualityResolution(quality: ExportQuality): number {\n if (quality === 'ultra') return 3;\n if (quality === 'hd') return 2;\n return 1;\n }\n\n private getExportFrame(mode: ExportMode, margin: number): Rectangle {\n const pixiApp = this.ctx.app.getPixiApp();\n\n if (mode === 'viewport') {\n return new Rectangle(0, 0, pixiApp.screen.width, pixiApp.screen.height);\n }\n\n return this.boundsToFrame(this.getContentBounds(), margin);\n }\n\n private getContentBounds(): RectLike {\n const boundsList = Array.from(this.ctx.registry.getAll().values())\n .filter((element) => element.getOptions().visible !== false)\n .map((element) => element.getDisplayObject().getBounds())\n .filter((bounds) => bounds.width > 0 && bounds.height > 0);\n\n const [first, ...rest] = boundsList;\n\n if (!first) {\n const pixiApp = this.ctx.app.getPixiApp();\n return { x: 0, y: 0, width: pixiApp.screen.width, height: pixiApp.screen.height };\n }\n\n let minX = first.x;\n let minY = first.y;\n let maxX = first.x + first.width;\n let maxY = first.y + first.height;\n\n for (const bounds of rest) {\n minX = Math.min(minX, bounds.x);\n minY = Math.min(minY, bounds.y);\n maxX = Math.max(maxX, bounds.x + bounds.width);\n maxY = Math.max(maxY, bounds.y + bounds.height);\n }\n\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n }\n\n private boundsToFrame(bounds: RectLike, margin: number): Rectangle {\n const safeMargin = Math.max(0, margin);\n const x = Math.floor(bounds.x - safeMargin);\n const y = Math.floor(bounds.y - safeMargin);\n const right = Math.ceil(bounds.x + bounds.width + safeMargin);\n const bottom = Math.ceil(bounds.y + bounds.height + safeMargin);\n\n return new Rectangle(x, y, Math.max(1, right - x), Math.max(1, bottom - y));\n }\n\n private renderBase64(canvas: ExportCanvas): string {\n return canvas.toDataURL('image/png');\n }\n\n private async renderPng(canvas: ExportCanvas): Promise<Blob> {\n return await new Promise<Blob>((resolve, reject) => {\n canvas.toBlob((blob) => {\n if (blob) {\n resolve(blob);\n return;\n }\n reject(new Error('Failed to export PNG'));\n }, 'image/png');\n });\n }\n}\n","import type { FontManager } from '@/extensions/fonts/FontManager';\nimport type { FontsAccessor } from '@/extensions/fonts/types';\n\nexport function createFontsAccessor(getManager: () => FontManager | undefined): FontsAccessor {\n return {\n load: async (family, url) => {\n const fontManager = getManager();\n if (!fontManager) {\n throw new Error('Fonts extension is disabled');\n }\n return fontManager.load(family, url);\n },\n isLoaded: (family) => getManager()?.isLoaded(family) ?? false,\n getLoadedFonts: () => getManager()?.getLoadedFonts() ?? [],\n };\n}\n","import type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createFontsAccessor } from '@/extensions/fonts/accessor';\n\ntype PendingFontLoad = {\n url: string;\n promise: Promise<void>;\n};\n\nexport class FontManager implements Extension {\n readonly name = 'fonts';\n accessors?: { fonts: ReturnType<typeof createFontsAccessor> };\n private readonly loaded = new Map<string, string>();\n private readonly pending = new Map<string, PendingFontLoad>();\n\n init(ctx: EditorContext): void {\n this.accessors = {\n fonts: createFontsAccessor(() => ctx.getExtension<FontManager>('fonts')),\n };\n }\n\n async load(family: string, url: string): Promise<void> {\n const loadedUrl = this.loaded.get(family);\n if (loadedUrl) {\n if (loadedUrl !== url) {\n throw new Error(\n `Font family \"${family}\" is already loaded from \"${loadedUrl}\", cannot load \"${url}\".`,\n );\n }\n return;\n }\n\n const pendingLoad = this.pending.get(family);\n if (pendingLoad) {\n if (pendingLoad.url !== url) {\n throw new Error(\n `Font family \"${family}\" is already loading from \"${pendingLoad.url}\", cannot load \"${url}\".`,\n );\n }\n return pendingLoad.promise;\n }\n\n const promise = this.loadFontFace(family, url);\n this.pending.set(family, { url, promise });\n return promise;\n }\n\n isLoaded(family: string): boolean {\n return this.loaded.has(family);\n }\n\n getLoadedFonts(): readonly string[] {\n return [...this.loaded.keys()];\n }\n\n private async loadFontFace(family: string, url: string): Promise<void> {\n try {\n const font = new FontFace(family, `url(${url})`);\n await font.load();\n document.fonts.add(font);\n this.loaded.set(family, url);\n } finally {\n this.pending.delete(family);\n }\n }\n}\n","import type { GridManager } from '@/extensions/grid/GridManager';\nimport type { GridAccessor, GridState } from '@/extensions/grid/types';\n\nconst DEFAULT_GRID_STATE: GridState = {\n cellSize: 20,\n majorInterval: 5,\n visible: true,\n};\n\nexport function createGridAccessor(getManager: () => GridManager | undefined): GridAccessor {\n return {\n setVisible: (visible) => getManager()?.setVisible(visible),\n isVisible: () => getManager()?.getState().visible ?? true,\n getState: () => getManager()?.getState() ?? DEFAULT_GRID_STATE,\n setCellSize: (size) => getManager()?.setCellSize(size),\n setMajorInterval: (interval) => getManager()?.setMajorInterval(interval),\n };\n}\n","import { Graphics, TilingSprite } from 'pixi.js';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { Extension } from '@/extensions/Extension';\nimport { createGridAccessor } from '@/extensions/grid/accessor';\nimport type { GridConfig, GridState } from '@/extensions/grid/types';\n\nconst DEFAULTS: Required<GridConfig> = {\n cellSize: 20,\n majorInterval: 5,\n visible: true,\n minorLineColor: 0x000000,\n minorLineAlpha: 0.07,\n majorLineColor: 0x000000,\n majorLineAlpha: 0.2,\n};\n\nexport class GridManager implements Extension {\n readonly name = 'grid';\n accessors?: { grid: ReturnType<typeof createGridAccessor> };\n private cfg: Required<GridConfig>;\n private sprite?: TilingSprite;\n private ctx!: EditorContext;\n private cleanupFns: Array<() => void> = [];\n\n constructor(config: GridConfig = {}) {\n this.cfg = { ...DEFAULTS, ...config };\n }\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.rebuildGrid();\n this.accessors = {\n grid: createGridAccessor(() => ctx.getExtension<GridManager>('grid')),\n };\n\n const onCameraChanged = (state: { zoom: number; x: number; y: number }) => {\n this.syncCameraTransform(state);\n };\n ctx.events.on('camera:changed', onCameraChanged);\n this.cleanupFns.push(() => ctx.events.off('camera:changed', onCameraChanged));\n }\n\n private rebuildGrid(): void {\n this.destroySprite();\n this.ensureSprite();\n this.syncVisibility();\n }\n\n private createGridTexture() {\n const pixi = this.ctx.app.getPixiApp();\n const {\n cellSize,\n majorInterval,\n minorLineColor,\n minorLineAlpha,\n majorLineColor,\n majorLineAlpha,\n } = this.cfg;\n const tileSize = cellSize * majorInterval;\n\n const g = new Graphics();\n\n // Interior minor lines (skip 0 and majorInterval — those are major borders)\n for (let i = 1; i < majorInterval; i++) {\n const pos = i * cellSize;\n g.moveTo(pos, 0).lineTo(pos, tileSize).moveTo(0, pos).lineTo(tileSize, pos);\n }\n g.stroke({ color: minorLineColor, alpha: minorLineAlpha, width: 1 });\n\n // Major border lines (top and left edges of the repeating tile)\n g.moveTo(0, 0).lineTo(tileSize, 0).moveTo(0, 0).lineTo(0, tileSize);\n g.stroke({ color: majorLineColor, alpha: majorLineAlpha, width: 1 });\n\n const texture = pixi.renderer.generateTexture(g);\n g.destroy();\n return texture;\n }\n\n private ensureSprite(): void {\n const pixi = this.ctx.app.getPixiApp();\n const texture = this.createGridTexture();\n\n const { width, height } = pixi.screen;\n this.sprite = new TilingSprite({ texture, width, height });\n this.sprite.zIndex = -1000;\n pixi.stage.addChild(this.sprite);\n const cameraState = this.ctx.getExtension<CameraManager>('camera')?.getState() ?? {\n zoom: 1,\n x: 0,\n y: 0,\n };\n this.syncCameraTransform(cameraState);\n }\n\n private destroySprite(): void {\n this.sprite?.destroy(true);\n this.sprite = undefined;\n }\n\n private syncVisibility(): void {\n if (this.sprite) {\n this.sprite.visible = this.cfg.visible;\n }\n }\n\n private syncCameraTransform({ zoom, x, y }: { zoom: number; x: number; y: number }): void {\n if (!this.sprite) return;\n this.sprite.tileScale.set(zoom);\n const tilePixels = this.cfg.cellSize * this.cfg.majorInterval * zoom;\n this.sprite.tilePosition.x = x % tilePixels;\n this.sprite.tilePosition.y = y % tilePixels;\n }\n\n getState(): GridState {\n return {\n cellSize: this.cfg.cellSize,\n majorInterval: this.cfg.majorInterval,\n visible: this.cfg.visible,\n };\n }\n\n setVisible(visible: boolean): void {\n this.cfg.visible = visible;\n this.syncVisibility();\n }\n\n setCellSize(size: number): void {\n this.cfg.cellSize = size;\n this.rebuildGrid();\n }\n\n setMajorInterval(interval: number): void {\n this.cfg.majorInterval = interval;\n this.rebuildGrid();\n }\n\n destroy(): void {\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n this.destroySprite();\n }\n}\n","import type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { HistoryAccessor } from '@/extensions/history/types';\n\nexport function createHistoryAccessor(\n getManager: () => HistoryManager | undefined,\n): HistoryAccessor {\n return {\n undo: async () => {\n await getManager()?.undo();\n },\n redo: async () => {\n await getManager()?.redo();\n },\n canUndo: () => getManager()?.canUndo() ?? false,\n canRedo: () => getManager()?.canRedo() ?? false,\n setClipboard: (items) => {\n getManager()?.setClipboard(items);\n },\n getClipboard: () => getManager()?.getClipboard() ?? [],\n };\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { KeyboardShortcuts } from '@/core/KeyboardShortcuts';\nimport type { Extension } from '@/extensions/Extension';\nimport { createHistoryAccessor } from '@/extensions/history/accessor';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport type { Command } from '@/extensions/history/commands/Command';\nimport { RemoveCommand } from '@/extensions/history/commands/RemoveCommand';\nimport { UpdateCommand } from '@/extensions/history/commands/UpdateCommand';\nimport type { HistoryConfig, HistoryTrack } from '@/extensions/history/types';\n\nconst DEFAULT_HISTORY_TRACK: readonly HistoryTrack[] = [\n 'move',\n 'resize',\n 'rotate',\n 'add',\n 'remove',\n 'zOrder',\n 'align',\n 'text',\n];\n\nexport class HistoryManager implements Extension {\n readonly name = 'history';\n accessors?: { history: ReturnType<typeof createHistoryAccessor> };\n private ctx!: EditorContext;\n private undoStack: Command[] = [];\n private redoStack: Command[] = [];\n private shortcuts: KeyboardShortcuts | null = null;\n private clipboard: BaseOptions[] = [];\n private maxEntries = 100;\n private trackedKinds = new Set<HistoryTrack>(DEFAULT_HISTORY_TRACK);\n\n constructor(private readonly config: HistoryConfig = {}) {}\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.maxEntries = Math.max(1, this.config.max ?? 100);\n this.trackedKinds = new Set(this.config.track ?? DEFAULT_HISTORY_TRACK);\n\n const canvas = ctx.app.getCanvas();\n this.shortcuts = new KeyboardShortcuts(canvas);\n\n this.shortcuts.register('ctrl+z', () => this.undo());\n this.shortcuts.register('ctrl+shift+z', () => this.redo());\n\n this.accessors = {\n history: createHistoryAccessor(() => ctx.getExtension<HistoryManager>('history')),\n };\n }\n\n setClipboard(items: BaseOptions[]): void {\n this.clipboard = items.map((opts) => ({ ...opts }));\n }\n\n getClipboard(): BaseOptions[] {\n return this.clipboard.map((opts) => ({ ...opts }));\n }\n\n async execute(command: Command): Promise<void> {\n await command.execute();\n this.record(command);\n }\n\n add(items: BaseOptions | readonly BaseOptions[]): Promise<void> {\n const list = Array.isArray(items) ? items : [items];\n return this.executeCommand(list, (normalized) => new AddCommand(this.ctx, normalized));\n }\n\n remove(ids: string | readonly string[]): Promise<void> {\n const list = Array.isArray(ids) ? ids : [ids];\n return this.executeCommand(list, (normalized) => new RemoveCommand(this.ctx, normalized));\n }\n\n update(\n id: string,\n kind: 'move' | 'resize' | 'rotate' | 'zOrder' | 'align' | 'text',\n prev: BaseOptions,\n next: Partial<BaseOptions>,\n ): Promise<void> {\n const cmd = UpdateCommand.create(this.ctx, id, kind, prev, next);\n if (!cmd) return Promise.resolve();\n return this.execute(cmd);\n }\n\n record(command: Command): void {\n if (!this.shouldTrack(command.kind)) {\n return;\n }\n\n this.undoStack.push(command);\n this.trimUndoStack();\n this.redoStack = [];\n this.ctx.events.emit('history:changed');\n }\n\n async undo(): Promise<void> {\n const cmd = this.undoStack.pop();\n if (!cmd) return;\n await cmd.undo();\n this.redoStack.push(cmd);\n this.ctx.events.emit('history:changed');\n }\n\n async redo(): Promise<void> {\n const cmd = this.redoStack.pop();\n if (!cmd) return;\n await cmd.execute();\n this.undoStack.push(cmd);\n this.ctx.events.emit('history:changed');\n }\n\n canUndo(): boolean {\n return this.undoStack.length > 0;\n }\n\n canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n shouldTrack(kind: HistoryTrack): boolean {\n return this.trackedKinds.has(kind);\n }\n\n destroy(): void {\n this.shortcuts?.destroy();\n this.undoStack = [];\n this.redoStack = [];\n this.clipboard = [];\n }\n\n private trimUndoStack(): void {\n if (this.undoStack.length <= this.maxEntries) {\n return;\n }\n\n this.undoStack.splice(0, this.undoStack.length - this.maxEntries);\n }\n\n private executeCommand<T>(\n items: readonly T[],\n create: (items: readonly T[]) => Command,\n ): Promise<void> {\n return this.execute(create(items));\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\nimport type { InteractionAccessor } from '@/extensions/interaction/types';\n\nexport function createInteractionAccessor(params: {\n ctx: EditorContext;\n getManager: () => InteractionManager | undefined;\n}): InteractionAccessor {\n function select(idOrIds: string | readonly string[] | null): void {\n params.getManager()?.select(idOrIds);\n }\n\n async function duplicate(): Promise<void> {\n await params.getManager()?.duplicate();\n }\n\n function getSelectedIds(): string[] {\n return [...(params.getManager()?.getSelectedIds() ?? [])];\n }\n\n function getSelectedOptions(): BaseOptions[] {\n return getSelectedIds()\n .map((id) => params.ctx.getElement(id)?.getOptions())\n .filter((opts): opts is BaseOptions => opts !== undefined);\n }\n\n return { select, duplicate, getSelectedIds, getSelectedOptions };\n}\n","import type { Container } from 'pixi.js';\nimport { Rectangle } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\n\nexport type HandlePosition = 'tl' | 'tc' | 'tr' | 'lc' | 'rc' | 'bl' | 'bc' | 'br' | 'top' | 'btop';\n\nexport interface HandlePoint {\n x: number;\n y: number;\n}\n\nfunction getBoundingRect(container: Container): Rectangle {\n const bounds = container.getBounds();\n return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);\n}\n\nfunction getCombinedBoundingRect(elements: ReadonlyArray<BaseElement<BaseOptions>>): Rectangle {\n if (elements.length === 0) return new Rectangle(0, 0, 0, 0);\n\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (const el of elements) {\n const r = getBoundingRect(el.getDisplayObject());\n if (r.x < minX) minX = r.x;\n if (r.y < minY) minY = r.y;\n if (r.x + r.width > maxX) maxX = r.x + r.width;\n if (r.y + r.height > maxY) maxY = r.y + r.height;\n }\n\n return new Rectangle(minX, minY, maxX - minX, maxY - minY);\n}\n\nfunction getHandlePositions(rect: Rectangle, handleSize = 20): Record<HandlePosition, HandlePoint> {\n const { x, y, width: w, height: h } = rect;\n const cx = x + w / 2;\n const cy = y + h / 2;\n // Keep a fixed 12px gap between the tc handle top edge and the rotate handle bottom edge.\n const topOffset = handleSize + 12;\n\n return {\n tl: { x, y },\n tc: { x: cx, y },\n tr: { x: x + w, y },\n lc: { x, y: cy },\n rc: { x: x + w, y: cy },\n bl: { x, y: y + h },\n bc: { x: cx, y: y + h },\n br: { x: x + w, y: y + h },\n top: { x: cx, y: y - topOffset },\n btop: { x: cx, y: y - topOffset / 2 },\n };\n}\n\nexport const Transform = {\n getBoundingRect,\n getCombinedBoundingRect,\n getHandlePositions,\n};\n","export const ARROW_BOTH_SIDES_SVG = `<svg width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M22.0679 11.9341C22.2258 12.0716 22.3257 12.2741 22.3257 12.5C22.3257 12.7249 22.2267 12.9267 22.0699 13.0641L18.1064 17.0302C17.8136 17.3231 17.3387 17.3233 17.0457 17.0305C16.7528 16.7377 16.7526 16.2628 17.0454 15.9698L19.7635 13.25L4.88801 13.25L7.60597 15.9699C7.89876 16.2629 7.89859 16.7377 7.6056 17.0305C7.3126 17.3233 6.83773 17.3231 6.54494 17.0301L2.54761 13.03C2.25496 12.7372 2.25496 12.2626 2.54763 11.9697L6.54496 7.96984C6.83776 7.67686 7.31263 7.6767 7.60562 7.9695C7.8986 8.2623 7.89875 8.73718 7.60595 9.03016L4.88785 11.75L19.7633 11.75L17.0454 9.03014C16.7526 8.73715 16.7528 8.26227 17.0458 7.96948C17.3388 7.67669 17.8136 7.67686 18.1064 7.96986L22.0679 11.9341Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const COPY_SVG = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.8923 16.7332C16.8923 17.9759 15.885 18.9832 14.6423 18.9832H6.34375C5.10111 18.9832 4.09375 17.9759 4.09375 16.7332V8.60187C4.09375 8.00538 4.33061 7.4333 4.75226 7.01138L9.10142 2.65951C9.52341 2.23725 10.0959 2 10.6929 2H14.6423C15.885 2 16.8923 3.00736 16.8923 4.25V16.7332ZM14.6423 17.4832C15.0566 17.4832 15.3923 17.1475 15.3923 16.7332V4.25C15.3923 3.83579 15.0565 3.5 14.6423 3.5H10.8227L10.8249 6.47969C10.8257 7.72296 9.81813 8.73129 8.57486 8.73129H5.59375V16.7332C5.59375 17.1475 5.92954 17.4832 6.34375 17.4832H14.6423ZM6.65314 7.23129L9.32349 4.55928L9.32486 6.48076C9.32516 6.89518 8.98928 7.23129 8.57486 7.23129H6.65314Z\" fill=\"#ffffff\"/>\n<path d=\"M18.4065 5.68442C18.4065 5.27021 18.7423 4.93442 19.1565 4.93442C19.5707 4.93442 19.9065 5.27021 19.9065 5.68442V17.2514C19.9065 19.8747 17.7799 22.0014 15.1565 22.0014H7.79765C7.38344 22.0014 7.04765 21.6656 7.04765 21.2514C7.04765 20.8371 7.38344 20.5014 7.79765 20.5014H15.1565C16.9514 20.5014 18.4065 19.0463 18.4065 17.2514V5.68442Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const MOVE_SVG = `<svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M3.78217 3.46967C3.62191 3.62993 3.54934 3.84466 3.56445 4.05426V8C3.56445 8.41421 3.90024 8.75 4.31445 8.75C4.72867 8.75 5.06445 8.41421 5.06445 8V5.81261L11.2528 12.001L5.06445 18.1893V16C5.06445 15.5858 4.72867 15.25 4.31445 15.25C3.90024 15.25 3.56445 15.5858 3.56445 16V20C3.56445 20.4142 3.90024 20.75 4.31445 20.75H8.31409C8.72831 20.75 9.06409 20.4142 9.06409 20C9.06409 19.5858 8.72831 19.25 8.31409 19.25H6.12511L12.3135 13.0616L18.5018 19.25H16.3134C15.8992 19.25 15.5634 19.5858 15.5634 20C15.5634 20.4142 15.8992 20.75 16.3134 20.75H20.313C20.5119 20.75 20.7027 20.671 20.8433 20.5303C20.984 20.3897 21.063 20.1989 21.063 20L21.063 16C21.063 15.5858 20.7272 15.25 20.313 15.25C19.8988 15.25 19.563 15.5858 19.563 16L19.563 18.1898L13.3741 12.001L19.563 5.81212L19.563 8C19.563 8.41422 19.8988 8.75 20.313 8.75C20.7272 8.75 21.063 8.41421 21.063 8L21.063 4.04697C21.0759 3.83969 21.0032 3.62807 20.8448 3.46967C20.6982 3.32306 20.506 3.24983 20.3138 3.25C20.3135 3.25 20.3141 3.25 20.3138 3.25L16.3134 3.25C15.8991 3.25 15.5634 3.58579 15.5634 4C15.5634 4.41421 15.8991 4.75 16.3134 4.75H18.5038L12.3135 10.9403L6.12316 4.75H8.31409C8.7283 4.75 9.06409 4.41421 9.06409 4C9.06409 3.58579 8.7283 3.25 8.31409 3.25H4.31342C4.12117 3.24977 3.92885 3.32299 3.78217 3.46967Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const ROTATE_SVG = `<svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M3.13644 9.54175C3.02923 9.94185 3.26667 10.3531 3.66676 10.4603C4.06687 10.5675 4.47812 10.3301 4.58533 9.92998C5.04109 8.22904 6.04538 6.72602 7.44243 5.65403C8.83948 4.58203 10.5512 4.00098 12.3122 4.00098C14.0731 4.00098 15.7848 4.58203 17.1819 5.65403C18.3999 6.58866 19.3194 7.85095 19.8371 9.28639L18.162 8.34314C17.801 8.1399 17.3437 8.26774 17.1405 8.62867C16.9372 8.98959 17.0651 9.44694 17.426 9.65017L20.5067 11.3849C20.68 11.4825 20.885 11.5072 21.0766 11.4537C21.2682 11.4001 21.4306 11.2727 21.5282 11.0993L23.2629 8.01828C23.4661 7.65734 23.3382 7.2 22.9773 6.99679C22.6163 6.79358 22.159 6.92145 21.9558 7.28239L21.195 8.63372C20.5715 6.98861 19.5007 5.54258 18.095 4.464C16.436 3.19099 14.4033 2.50098 12.3122 2.50098C10.221 2.50098 8.1883 3.19099 6.52928 4.464C4.87027 5.737 3.67766 7.52186 3.13644 9.54175Z\" fill=\"#ffffff\"/>\n<path d=\"M21.4906 14.4582C21.5978 14.0581 21.3604 13.6469 20.9603 13.5397C20.5602 13.4325 20.1489 13.6699 20.0417 14.07C19.5859 15.7709 18.5816 17.274 17.1846 18.346C15.7875 19.418 14.0758 19.999 12.3149 19.999C10.5539 19.999 8.84219 19.418 7.44514 18.346C6.2292 17.4129 5.31079 16.1534 4.79261 14.721L6.45529 15.6573C6.81622 15.8605 7.27356 15.7327 7.47679 15.3718C7.68003 15.0108 7.55219 14.5535 7.19127 14.3502L4.11056 12.6155C3.93723 12.5179 3.73222 12.4932 3.54065 12.5467C3.34907 12.6003 3.18662 12.7278 3.08903 12.9011L1.3544 15.9821C1.15119 16.3431 1.27906 16.8004 1.64 17.0036C2.00094 17.2068 2.45828 17.079 2.66149 16.718L3.42822 15.3562C4.05115 17.0054 5.12348 18.4552 6.532 19.536C8.19102 20.809 10.2237 21.499 12.3149 21.499C14.406 21.499 16.4387 20.809 18.0977 19.536C19.7568 18.263 20.9494 16.4781 21.4906 14.4582Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const TRASH_SVG = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M14.7223 12.7585C14.7426 12.3448 14.4237 11.9929 14.01 11.9726C13.5963 11.9522 13.2444 12.2711 13.2241 12.6848L12.9999 17.2415C12.9796 17.6552 13.2985 18.0071 13.7122 18.0274C14.1259 18.0478 14.4778 17.7289 14.4981 17.3152L14.7223 12.7585Z\" fill=\"#ffffff\"/>\n<path d=\"M9.98802 11.9726C9.5743 11.9929 9.25542 12.3448 9.27577 12.7585L9.49993 17.3152C9.52028 17.7289 9.87216 18.0478 10.2859 18.0274C10.6996 18.0071 11.0185 17.6552 10.9981 17.2415L10.774 12.6848C10.7536 12.2711 10.4017 11.9522 9.98802 11.9726Z\" fill=\"#ffffff\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.249 2C9.00638 2 7.99902 3.00736 7.99902 4.25V5H5.5C4.25736 5 3.25 6.00736 3.25 7.25C3.25 8.28958 3.95503 9.16449 4.91303 9.42267L5.54076 19.8848C5.61205 21.0729 6.59642 22 7.78672 22H16.2113C17.4016 22 18.386 21.0729 18.4573 19.8848L19.085 9.42267C20.043 9.16449 20.748 8.28958 20.748 7.25C20.748 6.00736 19.7407 5 18.498 5H15.999V4.25C15.999 3.00736 14.9917 2 13.749 2H10.249ZM14.499 5V4.25C14.499 3.83579 14.1632 3.5 13.749 3.5H10.249C9.83481 3.5 9.49902 3.83579 9.49902 4.25V5H14.499ZM5.5 6.5C5.08579 6.5 4.75 6.83579 4.75 7.25C4.75 7.66421 5.08579 8 5.5 8H18.498C18.9123 8 19.248 7.66421 19.248 7.25C19.248 6.83579 18.9123 6.5 18.498 6.5H5.5ZM6.42037 9.5H17.5777L16.96 19.7949C16.9362 20.191 16.6081 20.5 16.2113 20.5H7.78672C7.38995 20.5 7.06183 20.191 7.03807 19.7949L6.42037 9.5Z\" fill=\"#ffffff\"/>\n</svg>`;\n","import { ARROW_BOTH_SIDES_SVG } from '@/extensions/interaction/icons/arrowBothSides';\nimport { COPY_SVG } from '@/extensions/interaction/icons/copy';\nimport { MOVE_SVG } from '@/extensions/interaction/icons/move';\nimport { ROTATE_SVG } from '@/extensions/interaction/icons/rotate';\nimport { TRASH_SVG } from '@/extensions/interaction/icons/trash';\n\nexport type IconKey = 'trash' | 'duplicate' | 'rotate' | 'arrowBothSides' | 'move';\n\nexport const ICONS: Record<IconKey, string> = {\n trash: TRASH_SVG,\n duplicate: COPY_SVG,\n rotate: ROTATE_SVG,\n arrowBothSides: ARROW_BOTH_SIDES_SVG,\n move: MOVE_SVG,\n};\n\nexport function getBuiltinIcon(key: IconKey): string {\n return ICONS[key];\n}\n\nexport function isIconKey(value: string): value is IconKey {\n return value in ICONS;\n}\n","import { Container, Graphics, Sprite, Texture } from 'pixi.js';\nimport type { HandlePosition } from '@/core/Transform';\nimport { ICONS, isIconKey } from '@/extensions/interaction/icons';\nimport type { ControlHandleOptions, HandlerType } from '@/extensions/interaction/types';\n\nconst HANDLE_W = 20;\nconst HANDLE_H = 20;\nconst HANDLE_RADIUS = 5;\nconst HANDLE_BG_COLOR = 0x1a73e8;\n\nconst HANDLE_ROTATIONS: Partial<Record<HandlePosition, number>> = {\n tl: Math.PI / 4,\n br: Math.PI / 4,\n tc: Math.PI / 2,\n bc: Math.PI / 2,\n lc: 0,\n rc: 0,\n tr: 0,\n bl: 0,\n top: 0,\n btop: 0,\n};\n\nconst TRANSFORM_CURSORS: Partial<Record<HandlePosition, string>> = {\n tl: 'nwse-resize',\n br: 'nwse-resize',\n tr: 'nesw-resize',\n bl: 'nesw-resize',\n tc: 'ns-resize',\n bc: 'ns-resize',\n lc: 'ew-resize',\n rc: 'ew-resize',\n};\n\nfunction resolveCursor(handler: HandlerType, position: HandlePosition): string {\n if (handler === 'transform') return TRANSFORM_CURSORS[position] ?? 'crosshair';\n if (handler === 'rotate') return 'grab';\n return 'pointer';\n}\n\nexport class ControlHandle {\n readonly container: Container;\n readonly position: HandlePosition;\n readonly handler: HandlerType;\n\n constructor(opts: ControlHandleOptions) {\n this.position = opts.position;\n this.handler = opts.handler;\n const w = opts.bgSize ?? HANDLE_W;\n const h = opts.bgSize ?? HANDLE_H;\n const iconSize = opts.size ?? Math.round(w * 0.6);\n\n this.container = new Container();\n this.container.eventMode = 'static';\n this.container.cursor = resolveCursor(opts.handler, opts.position);\n\n const bg = new Graphics();\n bg.roundRect(-w / 2, -h / 2, w, h, HANDLE_RADIUS);\n bg.fill({ color: opts.bgColor ?? HANDLE_BG_COLOR });\n this.container.addChild(bg);\n\n const iconRotation = HANDLE_ROTATIONS[opts.position] ?? 0;\n\n this.loadIcon(opts.icon, iconSize)\n .then((spr) => {\n if (!spr) return;\n spr.anchor.set(0.5);\n spr.width = iconSize;\n spr.height = iconSize;\n spr.rotation = iconRotation;\n this.container.addChild(spr);\n })\n .catch(() => {\n /* icon load failed silently */\n });\n }\n\n setPosition(x: number, y: number): void {\n this.container.position.set(x, y);\n }\n\n private async loadIcon(icon: string | undefined, size: number): Promise<Sprite | null> {\n if (!icon) return null;\n\n let svgString: string;\n\n if (isIconKey(icon)) {\n svgString = ICONS[icon];\n } else if (icon.trim().startsWith('<')) {\n svgString = icon;\n } else {\n try {\n const dpr = Math.ceil(window.devicePixelRatio ?? 1);\n const res = size * dpr * 2;\n const img = await this.loadImageUrl(icon, res);\n const canvas = document.createElement('canvas');\n canvas.width = res;\n canvas.height = res;\n canvas.getContext('2d')?.drawImage(img, 0, 0, res, res);\n const spr = new Sprite(Texture.from(canvas));\n spr.width = size;\n spr.height = size;\n return spr;\n } catch {\n return null;\n }\n }\n\n return this.svgToSprite(svgString, size);\n }\n\n private async svgToSprite(svgString: string, size: number): Promise<Sprite> {\n const dpr = Math.ceil(window.devicePixelRatio ?? 1);\n const res = size * dpr * 2; // render at 2× devicePixelRatio for crisp output\n const blob = new Blob([svgString], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(blob);\n const img = await this.loadImageUrl(url, res);\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n canvas.width = res;\n canvas.height = res;\n canvas.getContext('2d')?.drawImage(img, 0, 0, res, res);\n const texture = Texture.from(canvas);\n const spr = new Sprite(texture);\n spr.width = size;\n spr.height = size;\n return spr;\n }\n\n private loadImageUrl(url: string, size: number): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new window.Image(size, size);\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n }\n}\n","import { Container, Graphics, Rectangle } from 'pixi.js';\nimport type { EditorKitOptions } from '@/canvas/EditorKitOptions';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { HandlePosition } from '@/core/Transform';\nimport { Transform } from '@/core/Transform';\nimport { ControlHandle } from '@/extensions/interaction/controls/ControlHandle';\nimport type { ControlConfig, InteractionTheme } from '@/extensions/interaction/types';\n\nconst DEFAULT_CONTROLS: Partial<Record<HandlePosition, ControlConfig>> = {\n tl: { icon: 'arrowBothSides', handler: 'transform' },\n tc: { icon: 'arrowBothSides', handler: 'transform' },\n tr: { icon: 'trash', handler: 'delete' },\n lc: { icon: 'arrowBothSides', handler: 'transform' },\n rc: { icon: 'arrowBothSides', handler: 'transform' },\n bl: { icon: 'duplicate', handler: 'duplicate' },\n bc: { icon: 'arrowBothSides', handler: 'transform' },\n br: { icon: 'arrowBothSides', handler: 'transform' },\n top: { icon: 'rotate', handler: 'rotate' },\n};\n\nconst DEFAULT_LINE_COLOR: number | string = 0x1a73e8;\nconst DEFAULT_LINE_THICKNESS = 1.5;\nconst DEFAULT_PADDING = 4;\n\nexport class BoundingBox {\n readonly container: Container;\n private readonly rectGraphics: Graphics;\n private readonly handles: ControlHandle[] = [];\n private isVisible = true;\n private readonly theme: InteractionTheme;\n\n constructor(overlayLayer: Container, options: EditorKitOptions) {\n const interactionConfig =\n typeof options.extensions?.interaction === 'object'\n ? options.extensions.interaction\n : undefined;\n this.theme = interactionConfig?.theme ?? {};\n\n this.container = new Container();\n this.rectGraphics = new Graphics();\n this.container.addChild(this.rectGraphics);\n overlayLayer.addChild(this.container);\n this.container.visible = false;\n\n const controlConfigs = {\n ...DEFAULT_CONTROLS,\n ...(interactionConfig?.controls ?? {}),\n };\n\n const handleTheme = this.theme.handle;\n for (const [pos, cfg] of Object.entries(controlConfigs) as Array<\n [HandlePosition, ControlConfig]\n >) {\n if (!cfg) continue;\n const handle = new ControlHandle({\n position: pos,\n icon: cfg.icon,\n handler: cfg.handler,\n size: cfg.size,\n bgSize: handleTheme?.size,\n bgColor: handleTheme?.color,\n });\n this.container.addChild(handle.container);\n this.handles.push(handle);\n }\n }\n\n getHandles(): readonly ControlHandle[] {\n return this.handles;\n }\n\n update(elements: ReadonlyArray<BaseElement<BaseOptions>>): void {\n if (elements.length === 0) {\n this.container.visible = false;\n return;\n }\n this.container.visible = this.isVisible;\n\n if (elements.length === 1) {\n const [element] = elements;\n if (element) {\n this.updateSingle(element);\n }\n } else {\n this.container.position.set(0, 0);\n this.container.rotation = 0;\n const rect = this.padRect(Transform.getCombinedBoundingRect(elements));\n this.drawRect(rect);\n this.positionHandles(rect);\n }\n }\n\n hide(): void {\n this.isVisible = false;\n this.container.visible = false;\n }\n\n show(): void {\n this.isVisible = true;\n }\n\n destroy(): void {\n this.container.destroy({ children: true });\n }\n\n // Single-element path: rotate the bounding box container to match the element.\n // Temporarily zero rotation to get unrotated bounds, then draw rect in local space.\n private updateSingle(el: BaseElement<BaseOptions>): void {\n const dObj = el.getDisplayObject();\n const savedRot = dObj.rotation;\n\n dObj.rotation = 0;\n const bounds = dObj.getBounds();\n dObj.rotation = savedRot;\n\n const cx = bounds.x + bounds.width / 2;\n const cy = bounds.y + bounds.height / 2;\n\n this.container.position.set(cx, cy);\n this.container.rotation = savedRot;\n\n const localRect = this.padRect(\n new Rectangle(-bounds.width / 2, -bounds.height / 2, bounds.width, bounds.height),\n );\n this.drawRect(localRect);\n this.positionHandles(localRect);\n }\n\n private padRect(rect: Rectangle): Rectangle {\n const p = this.theme.boundingBox?.padding ?? DEFAULT_PADDING;\n return new Rectangle(rect.x - p, rect.y - p, rect.width + p * 2, rect.height + p * 2);\n }\n\n private drawRect(rect: Rectangle): void {\n const g = this.rectGraphics;\n g.clear();\n const { x, y, width: w, height: h } = rect;\n const color = this.theme.boundingBox?.lineColor ?? DEFAULT_LINE_COLOR;\n const thickness = this.theme.boundingBox?.lineThickness ?? DEFAULT_LINE_THICKNESS;\n const lineType = this.theme.boundingBox?.lineType ?? 'solid';\n\n if (lineType === 'dotted') {\n this.drawDottedLine(g, x, y, x + w, y, color, thickness);\n this.drawDottedLine(g, x + w, y, x + w, y + h, color, thickness);\n this.drawDottedLine(g, x + w, y + h, x, y + h, color, thickness);\n this.drawDottedLine(g, x, y + h, x, y, color, thickness);\n } else {\n g.moveTo(x, y)\n .lineTo(x + w, y)\n .moveTo(x + w, y)\n .lineTo(x + w, y + h)\n .moveTo(x + w, y + h)\n .lineTo(x, y + h)\n .moveTo(x, y + h)\n .lineTo(x, y)\n .stroke({ color, width: thickness });\n }\n\n const hasRotate = this.handles.some((h) => h.handler === 'rotate');\n if (hasRotate) {\n const cx = x + w / 2;\n const handleSize = this.theme.handle?.size ?? 20;\n const rotateCenter = y - (handleSize + 12);\n if (lineType === 'dotted') {\n this.drawDottedLine(g, cx, y, cx, rotateCenter, color, thickness);\n } else {\n g.moveTo(cx, y).lineTo(cx, rotateCenter).stroke({ color, width: thickness });\n }\n }\n }\n\n private drawDottedLine(\n g: Graphics,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n color: number | string,\n thickness: number,\n ): void {\n const dotRadius = thickness;\n const gap = 4;\n const dx = x2 - x1,\n dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n const nx = dx / len,\n ny = dy / len;\n const step = dotRadius * 2 + gap;\n for (let d = 0; d <= len; d += step) {\n g.circle(x1 + nx * d, y1 + ny * d, dotRadius).fill({ color });\n }\n }\n\n private positionHandles(rect: Rectangle): void {\n const handleSize = this.theme.handle?.size ?? 20;\n const positions = Transform.getHandlePositions(rect, handleSize);\n for (const handle of this.handles) {\n const pt = positions[handle.position];\n if (pt) handle.setPosition(pt.x, pt.y);\n }\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport { getMaxElementZIndex } from '@/core/duplicateOptions';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport type { InteractionClipboardContext } from '@/extensions/interaction/types';\n\nexport function copySelectedToClipboard(ctx: InteractionClipboardContext): void {\n const snapshots = ctx.getSelectedOptions().map((options) => ({ ...options }));\n const history = ctx.getHistoryManager();\n if (history) history.setClipboard(snapshots);\n else ctx.setClipboard(snapshots);\n}\n\nexport async function pasteSelectionFromClipboard(ctx: InteractionClipboardContext): Promise<void> {\n const history = ctx.getHistoryManager();\n const items = history ? history.getClipboard() : ctx.getClipboard();\n if (!items.length) return;\n\n const pasted: BaseOptions[] = items.map((opts) => ({\n ...opts,\n id: `${opts.id}_paste_${crypto.randomUUID()}`,\n x: (opts.x ?? 0) + 10,\n y: (opts.y ?? 0) + 10,\n }));\n\n const sorted = [...pasted].sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0));\n let nextZ = getMaxElementZIndex(ctx.ctx.registry) + 1;\n for (const options of sorted) options.zIndex = nextZ++;\n\n if (history) {\n await history.execute(new AddCommand(ctx.ctx, pasted));\n } else {\n for (const options of pasted) {\n await ctx.ctx.addElement(ctx.ctx.registry.createFromOptions(options));\n }\n }\n\n ctx.setSelection(pasted.map((options) => options.id));\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { buildDuplicateOptions, getMaxElementZIndex } from '@/core/duplicateOptions';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport { CompositeCommand } from '@/extensions/history/commands/CompositeCommand';\nimport { RemoveCommand } from '@/extensions/history/commands/RemoveCommand';\nimport { UpdateCommand } from '@/extensions/history/commands/UpdateCommand';\nimport {\n copySelectedToClipboard,\n pasteSelectionFromClipboard,\n} from '@/extensions/interaction/InteractionClipboard';\nimport type { InteractionActionsContext, StartState } from '@/extensions/interaction/types';\n\nexport async function deleteSelected(ctx: InteractionActionsContext): Promise<void> {\n const ids = [...ctx.getSelectedIds()];\n if (ids.length === 0) return;\n\n ctx.setSelection(null);\n\n const history = ctx.getHistoryManager();\n if (history) {\n await history.execute(new RemoveCommand(ctx.ctx, ids));\n } else {\n for (const id of ids) ctx.ctx.removeElement(id);\n }\n}\n\nexport function copySelected(ctx: InteractionActionsContext): void {\n copySelectedToClipboard(ctx);\n}\n\nexport async function duplicateSelection(ctx: InteractionActionsContext): Promise<void> {\n const snapshots = ctx\n .getSelectedElements()\n .map((el) => ({ ...el.getOptions() }))\n .sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0));\n if (!snapshots.length) return;\n\n const duplicates = buildDuplicateOptions(snapshots, getMaxElementZIndex(ctx.ctx.registry) + 1);\n\n const history = ctx.getHistoryManager();\n if (history) {\n await history.execute(new AddCommand(ctx.ctx, duplicates));\n } else {\n for (const options of duplicates) {\n await ctx.ctx.addElement(ctx.ctx.registry.createFromOptions(options));\n }\n }\n\n ctx.setSelection(duplicates.map((options) => options.id));\n}\n\nexport async function pasteSelected(ctx: InteractionActionsContext): Promise<void> {\n await pasteSelectionFromClipboard(ctx);\n}\n\nexport function recordGroupUpdate(\n ctx: Pick<InteractionActionsContext, 'ctx' | 'getHistoryManager'>,\n elements: readonly BaseElement<BaseOptions>[],\n beforeStates: Map<string, StartState | BaseOptions>,\n kind: 'move' | 'resize' | 'rotate',\n): void {\n const history = ctx.getHistoryManager();\n if (!history?.shouldTrack(kind)) {\n return;\n }\n\n const commands = elements\n .map((el) => {\n const before = beforeStates.get(el.getId());\n if (!before) return null;\n\n return UpdateCommand.createFromSnapshot(\n ctx.ctx,\n el.getId(),\n kind,\n before as Partial<BaseOptions>,\n ctx.ctx.registry.get(el.getId())?.getOptions(),\n el.getOptions(),\n );\n })\n .filter((command): command is UpdateCommand => command !== null);\n\n if (commands.length === 0) {\n return;\n }\n\n const [first] = commands;\n const command =\n commands.length === 1 && first ? first : new CompositeCommand(`Update ${kind}`, kind, commands);\n\n history.record(command);\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { InteractionSelectionStateContext } from '@/extensions/interaction/types';\n\nexport function selectOnly(ctx: InteractionSelectionStateContext, id: string): void {\n setSelection(ctx, [id]);\n}\n\nexport function toggleSelection(ctx: InteractionSelectionStateContext, id: string): void {\n if (ctx.selectedIds.has(id)) ctx.selectedIds.delete(id);\n else ctx.selectedIds.add(id);\n setSelection(ctx, [...ctx.selectedIds]);\n}\n\nexport function onStageClick(ctx: InteractionSelectionStateContext): void {\n if (ctx.isPanBlocked()) return;\n if (ctx.selectedIds.size === 0) return;\n setSelection(ctx, null);\n}\n\nexport function setSelection(\n ctx: InteractionSelectionStateContext,\n ids: readonly string[] | null,\n): void {\n ctx.selectedIds.clear();\n for (const id of ids ?? []) {\n ctx.selectedIds.add(id);\n }\n\n const selected = [...ctx.selectedIds];\n ctx.ctx.events.emit(\n 'element:selected',\n selected.length === 0 ? null : selected.length === 1 ? (selected[0] ?? null) : selected,\n );\n updateBoundingBox(ctx);\n}\n\nexport function getSelectedElements(\n ctx: InteractionSelectionStateContext,\n): BaseElement<BaseOptions>[] {\n return [...ctx.selectedIds]\n .map((id) => ctx.ctx.registry.get(id))\n .filter((el): el is BaseElement<BaseOptions> => el !== undefined);\n}\n\nexport function getSelectedOptions(ctx: InteractionSelectionStateContext): BaseOptions[] {\n return getSelectedElements(ctx).map((element) => element.getOptions());\n}\n\nexport function updateBoundingBox(ctx: InteractionSelectionStateContext): void {\n ctx.boundingBox.update(getSelectedElements(ctx));\n}\n\nexport function captureElementOptions(\n elements: readonly BaseElement<BaseOptions>[],\n patch?: (element: BaseElement<BaseOptions>) => Partial<BaseOptions>,\n): Map<string, BaseOptions> {\n const snapshots = new Map<string, BaseOptions>();\n for (const element of elements) {\n snapshots.set(element.getId(), {\n ...element.getOptions(),\n ...patch?.(element),\n });\n }\n return snapshots;\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { HandlePosition } from '@/core/Transform';\nimport type { ResizeAxes, StartState } from '@/extensions/interaction/types';\n\nexport const TRANSFORM_AXES: Partial<Record<HandlePosition, ResizeAxes>> = {\n tl: { xDir: -1, yDir: -1, proportional: true },\n tc: { xDir: 0, yDir: -1 },\n lc: { xDir: -1, yDir: 0 },\n rc: { xDir: 1, yDir: 0 },\n bl: { xDir: -1, yDir: 1 },\n bc: { xDir: 0, yDir: 1 },\n br: { xDir: 1, yDir: 1, proportional: true },\n tr: { xDir: 1, yDir: -1 },\n};\n\nexport function createResizeStartState(\n options: BaseOptions & {\n fontSize?: number;\n width?: number;\n height?: number;\n radius?: number;\n strokeWidth?: number;\n },\n): StartState {\n return {\n x: options.x ?? 0,\n y: options.y ?? 0,\n scaleX: options.scaleX ?? 1,\n scaleY: options.scaleY ?? 1,\n fontSize: options.fontSize,\n width: options.width,\n height: options.height,\n radius: options.radius,\n strokeWidth: options.strokeWidth,\n };\n}\n\nexport function resolveResizeAnchor(\n axes: { xDir: -1 | 0 | 1; yDir: -1 | 0 | 1 },\n rect: { x: number; y: number; width: number; height: number },\n): { x: number; y: number } {\n return {\n x: axes.xDir < 0 ? rect.x + rect.width : axes.xDir > 0 ? rect.x : rect.x + rect.width / 2,\n y: axes.yDir < 0 ? rect.y + rect.height : axes.yDir > 0 ? rect.y : rect.y + rect.height / 2,\n };\n}\n\nexport function resolveResizeScale(params: {\n axes: { xDir: -1 | 0 | 1; yDir: -1 | 0 | 1; proportional?: true };\n dx: number;\n dy: number;\n width: number;\n height: number;\n}): { sx: number; sy: number } {\n const { axes, dx, dy, width, height } = params;\n\n if (axes.proportional) {\n const diagX = axes.xDir * width;\n const diagY = axes.yDir * height;\n const diagLen = Math.sqrt(diagX * diagX + diagY * diagY);\n const proj = dx * (diagX / diagLen) + dy * (diagY / diagLen);\n const minScale = 10 / Math.max(width, height);\n const scale = Math.max(minScale, (diagLen + proj) / diagLen);\n return { sx: scale, sy: scale };\n }\n\n const newW = Math.max(10, width + axes.xDir * dx);\n const newH = Math.max(10, height + axes.yDir * dy);\n return {\n sx: axes.xDir !== 0 ? newW / width : 1,\n sy: axes.yDir !== 0 ? newH / height : 1,\n };\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { ResizeAxes, StartState } from '@/extensions/interaction/types';\n\n/**\n * Computes the update payload for one element during a resize drag.\n * Returns a partial options object ready to pass directly to el.update().\n */\nexport function computeResizeUpdate(\n type: string,\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n ax: number,\n ay: number,\n): Partial<BaseOptions> {\n const x = ax + (s.x - ax) * sx;\n const y = ay + (s.y - ay) * sy;\n const dims = computeDims(type, s, axes, sx, sy);\n return { x, y, ...dims } as Partial<BaseOptions>;\n}\n\n// ── Per-category dimension helpers ───────────────────────────────────────────\n\nfunction computeDims(\n type: string,\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n): Record<string, unknown> {\n if (type === 'text') {\n return textDims(s, axes, sx, sy);\n }\n if (type.startsWith('shape:')) {\n return shapeDims(s, axes, sx, sy);\n }\n return scaleDims(s, sx, sy);\n}\n\nfunction textDims(\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n): Record<string, unknown> {\n if (axes.proportional && s.fontSize !== undefined) {\n return {\n fontSize: Math.max(1, s.fontSize * sx),\n // Preserve any prior side-handle scaling so a later corner drag\n // compounds with the current visual transform instead of resetting it.\n scaleX: s.scaleX,\n scaleY: s.scaleY,\n };\n }\n return scaleDims(s, sx, sy);\n}\n\nfunction shapeDims(\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n): Record<string, unknown> {\n if (s.width !== undefined && s.height !== undefined) {\n // Rectangle / Circle / Star — scale each axis independently.\n return {\n ...(axes.xDir !== 0 ? { width: Math.max(1, s.width * sx) } : {}),\n ...(axes.yDir !== 0 ? { height: Math.max(1, s.height * sy) } : {}),\n scaleX: 1,\n scaleY: 1,\n };\n }\n if (s.width !== undefined) {\n // Line — x-handles change length (width), y-handles change thickness (strokeWidth).\n return {\n ...(axes.xDir !== 0 ? { width: Math.max(1, s.width * sx) } : {}),\n ...(axes.yDir !== 0 && s.strokeWidth !== undefined\n ? { strokeWidth: Math.max(0.5, s.strokeWidth * sy) }\n : {}),\n scaleX: 1,\n scaleY: 1,\n };\n }\n if (s.radius !== undefined) {\n // Circle with only radius — scale uniformly.\n const us = Math.sqrt(sx * sy);\n return { radius: Math.max(1, s.radius * us), scaleX: 1, scaleY: 1 };\n }\n // Line or unknown shape — fall back to scale.\n return scaleDims(s, sx, sy);\n}\n\nfunction scaleDims(s: StartState, sx: number, sy: number): Record<string, unknown> {\n return { scaleX: s.scaleX * sx, scaleY: s.scaleY * sy };\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport {\n clampBoundsDelta,\n getCanvasWorldBounds,\n getCombinedElementWorldBounds,\n isCanvasConstraintEnabled,\n} from '@/core/canvasBounds';\nimport type { HandlePosition } from '@/core/Transform';\nimport { Transform } from '@/core/Transform';\nimport { captureElementOptions } from '@/extensions/interaction/InteractionSelectionState';\nimport {\n createResizeStartState,\n resolveResizeAnchor,\n resolveResizeScale,\n TRANSFORM_AXES,\n} from '@/extensions/interaction/ResizeSession';\nimport { computeResizeUpdate } from '@/extensions/interaction/ResizeStrategy';\nimport type { InteractionGesturesContext, StartState } from '@/extensions/interaction/types';\nimport type { InternalSnapResult } from '@/extensions/snap/types';\n\nexport function startResize(\n ctx: InteractionGesturesContext,\n e: FederatedPointerEvent,\n pos: HandlePosition,\n): void {\n const elements = ctx.getSelectedElements();\n if (!elements.length) return;\n\n const axes = TRANSFORM_AXES[pos];\n if (!axes) return;\n\n const startRect = Transform.getCombinedBoundingRect(elements);\n if (startRect.width === 0 || startRect.height === 0) return;\n\n const camera = ctx.getCameraManager();\n const { x: axScreen, y: ayScreen } = resolveResizeAnchor(axes, startRect);\n const { x: ax, y: ay } = camera?.screenToWorld(axScreen, ayScreen) ?? {\n x: axScreen,\n y: ayScreen,\n };\n\n const startStates = new Map<string, StartState>();\n for (const el of elements) {\n startStates.set(\n el.getId(),\n createResizeStartState(\n el.getOptions() as BaseOptions & {\n fontSize?: number;\n width?: number;\n height?: number;\n radius?: number;\n strokeWidth?: number;\n },\n ),\n );\n }\n\n const startX = e.globalX;\n const startY = e.globalY;\n\n const onMove = (mv: FederatedPointerEvent) => {\n const dx = mv.globalX - startX;\n const dy = mv.globalY - startY;\n const { sx, sy } = resolveResizeScale({\n axes,\n dx,\n dy,\n width: startRect.width,\n height: startRect.height,\n });\n\n for (const el of elements) {\n const state = startStates.get(el.getId());\n if (!state) continue;\n el.update(computeResizeUpdate(el.getType(), state, axes, sx, sy, ax, ay));\n ctx.ctx.events.emit('element:updated', el.getId());\n }\n ctx.updateBoundingBox();\n };\n\n attachStageDrag(ctx, onMove, () => {\n ctx.recordGroupUpdate(elements, startStates, 'resize');\n });\n}\n\nexport function startRotate(ctx: InteractionGesturesContext, e: FederatedPointerEvent): void {\n const elements = ctx.getSelectedElements();\n if (!elements.length) return;\n\n const rect = Transform.getCombinedBoundingRect(elements);\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n\n const startAngle = Math.atan2(e.globalY - cy, e.globalX - cx);\n const startRots = new Map<string, number>();\n for (const el of elements) {\n startRots.set(el.getId(), el.getOptions().rotationDeg ?? 0);\n }\n\n const onMove = (mv: FederatedPointerEvent) => {\n const angle = Math.atan2(mv.globalY - cy, mv.globalX - cx);\n const deltaDeg = (angle - startAngle) * (180 / Math.PI);\n for (const el of elements) {\n el.update({\n rotationDeg: (startRots.get(el.getId()) ?? 0) + deltaDeg,\n } as Partial<BaseOptions>);\n ctx.ctx.events.emit('element:updated', el.getId());\n }\n ctx.updateBoundingBox();\n };\n\n attachStageDrag(ctx, onMove, () => {\n ctx.recordGroupUpdate(\n elements,\n captureElementOptions(elements, (element) => ({\n rotationDeg: startRots.get(element.getId()) ?? 0,\n })),\n 'rotate',\n );\n });\n}\n\nexport function startElementDrag(ctx: InteractionGesturesContext, e: FederatedPointerEvent): void {\n const startX = e.globalX;\n const startY = e.globalY;\n const selectedElements = ctx.getSelectedElements();\n const startPositions = captureElementOptions(selectedElements);\n\n const camera = ctx.getCameraManager();\n const snap = ctx.getSnapManager();\n\n const startBounds = snap ? getCombinedElementWorldBounds(ctx.ctx, selectedElements) : null;\n const startConstraintBounds = isCanvasConstraintEnabled(ctx.ctx)\n ? getCombinedElementWorldBounds(ctx.ctx, selectedElements)\n : null;\n\n ctx.boundingBox.hide();\n\n const onMove = (mv: FederatedPointerEvent) => {\n const zoom = camera?.getZoom() ?? 1;\n const dx = (mv.globalX - startX) / zoom;\n const dy = (mv.globalY - startY) / zoom;\n\n let snapDx = dx;\n let snapDy = dy;\n\n let snapResult: InternalSnapResult | null = null;\n\n if (snap && startBounds) {\n const result = snap.resolve(startBounds.x + dx, startBounds.y + dy, {\n width: startBounds.width,\n height: startBounds.height,\n exclude: [...ctx.getSelectedIds()],\n });\n snapDx = result.x - startBounds.x;\n snapDy = result.y - startBounds.y;\n snapResult = result;\n }\n\n if (isCanvasConstraintEnabled(ctx.ctx) && startConstraintBounds) {\n const constrained = clampBoundsDelta(\n {\n x: startConstraintBounds.x,\n y: startConstraintBounds.y,\n width: startConstraintBounds.width,\n height: startConstraintBounds.height,\n } as never,\n snapDx,\n snapDy,\n getCanvasWorldBounds(ctx.ctx),\n );\n snapDx = constrained.dx;\n snapDy = constrained.dy;\n }\n\n for (const [id, start] of startPositions) {\n const el = ctx.ctx.registry.get(id);\n if (!el) continue;\n el.update({\n x: (start.x ?? 0) + snapDx,\n y: (start.y ?? 0) + snapDy,\n } as Partial<BaseOptions>);\n ctx.ctx.events.emit('element:updated', id);\n }\n\n if (snap && snapResult) {\n const actualBounds = getCombinedElementWorldBounds(ctx.ctx, selectedElements);\n snap.showLines({\n ...snapResult,\n lineX: resolveSnapLinePosition(actualBounds.x, actualBounds.width, snapResult.xAnchor),\n lineY: resolveSnapLinePosition(actualBounds.y, actualBounds.height, snapResult.yAnchor),\n });\n }\n };\n\n attachStageDrag(ctx, onMove, () => {\n snap?.hideLines();\n ctx.boundingBox.show();\n ctx.updateBoundingBox();\n ctx.recordGroupUpdate(selectedElements, startPositions, 'move');\n });\n}\n\nfunction resolveSnapLinePosition(\n start: number,\n size: number,\n anchor: InternalSnapResult['xAnchor'] | InternalSnapResult['yAnchor'],\n): number | undefined {\n switch (anchor) {\n case 'min':\n return start;\n case 'center':\n return start + size / 2;\n case 'max':\n return start + size;\n default:\n return undefined;\n }\n}\n\nfunction attachStageDrag(\n ctx: Pick<InteractionGesturesContext, 'ctx'>,\n onMove: (e: FederatedPointerEvent) => void,\n onEnd?: () => void,\n): void {\n const stage = ctx.ctx.app.getPixiApp().stage;\n const onUp = () => {\n stage.off('pointermove', onMove);\n stage.off('pointerup', onUp);\n stage.off('pointerupoutside', onUp);\n onEnd?.();\n };\n stage.on('pointermove', onMove);\n stage.on('pointerup', onUp);\n stage.on('pointerupoutside', onUp);\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport { selectOnly, toggleSelection } from '@/extensions/interaction/InteractionSelectionState';\nimport type { InteractionSelectionBindingsContext } from '@/extensions/interaction/types';\n\nexport function syncSelectableElement(ctx: InteractionSelectionBindingsContext, id: string): void {\n const el = ctx.ctx.registry.get(id);\n if (!el || el.getOptions().selectable === false) {\n detachSelectableElement(ctx, id);\n return;\n }\n\n const displayObject = el.getDisplayObject();\n displayObject.eventMode = 'static';\n displayObject.cursor = 'move';\n\n const existing = ctx.selectableBindings.get(id);\n if (existing?.displayObject === displayObject) {\n return;\n }\n detachSelectableElement(ctx, id);\n\n const onPointerDown = (e: FederatedPointerEvent) => {\n if (e.button !== 0) return;\n if (ctx.isPanBlocked()) return;\n\n e.stopPropagation();\n const native = e.nativeEvent as PointerEvent | null;\n if (native?.ctrlKey || native?.metaKey) {\n toggleSelection(ctx, el.getId());\n } else {\n selectOnly(ctx, el.getId());\n }\n ctx.startElementDrag(e);\n };\n\n displayObject.on('pointerdown', onPointerDown);\n ctx.selectableBindings.set(id, { displayObject, onPointerDown });\n}\n\nexport function detachSelectableElement(\n ctx: InteractionSelectionBindingsContext,\n id: string,\n): void {\n const binding = ctx.selectableBindings.get(id);\n if (!binding) return;\n\n binding.displayObject.off('pointerdown', binding.onPointerDown);\n ctx.selectableBindings.delete(id);\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport { Container } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { KeyboardShortcuts } from '@/core/KeyboardShortcuts';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { Extension } from '@/extensions/Extension';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport { createInteractionAccessor } from '@/extensions/interaction/accessor';\nimport { BoundingBox } from '@/extensions/interaction/BoundingBox';\nimport {\n copySelected,\n deleteSelected,\n duplicateSelection,\n pasteSelected,\n recordGroupUpdate,\n} from '@/extensions/interaction/InteractionActions';\nimport {\n startElementDrag,\n startResize,\n startRotate,\n} from '@/extensions/interaction/InteractionGestures';\nimport {\n detachSelectableElement,\n syncSelectableElement,\n} from '@/extensions/interaction/InteractionSelectionBindings';\nimport {\n getSelectedElements,\n getSelectedOptions,\n onStageClick,\n setSelection,\n updateBoundingBox,\n} from '@/extensions/interaction/InteractionSelectionState';\nimport type {\n InteractionActionsContext,\n InteractionGesturesContext,\n InteractionSelectionBindingsContext,\n InteractionSelectionStateContext,\n SelectableBinding,\n StartState,\n} from '@/extensions/interaction/types';\nimport type { SnapManager } from '@/extensions/snap/SnapManager';\n\nexport class InteractionManager implements Extension {\n readonly name = 'interaction';\n accessors?: { interaction: ReturnType<typeof createInteractionAccessor> };\n private ctx!: EditorContext;\n private overlayLayer!: Container;\n private boundingBox!: BoundingBox;\n private selectedIds = new Set<string>();\n private shortcuts!: KeyboardShortcuts;\n private cleanupFns: Array<() => void> = [];\n private readonly selectableBindings = new Map<string, SelectableBinding>();\n private clipboard: BaseOptions[] = [];\n private selectionStateContext!: InteractionSelectionStateContext;\n private selectionBindingsContext!: InteractionSelectionBindingsContext;\n private gesturesContext!: InteractionGesturesContext;\n private actionsContext!: InteractionActionsContext;\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n interaction: createInteractionAccessor({\n ctx,\n getManager: () => ctx.getExtension<InteractionManager>('interaction'),\n }),\n };\n\n this.overlayLayer = new Container();\n this.overlayLayer.zIndex = Number.MAX_SAFE_INTEGER;\n this.overlayLayer.eventMode = 'passive';\n ctx.app.getPixiApp().stage.addChild(this.overlayLayer);\n\n this.boundingBox = new BoundingBox(this.overlayLayer, ctx.options);\n this.createContexts();\n this.setupHandleEvents();\n\n const selection = this.getSelectionBindingsContext();\n for (const id of ctx.registry.getAll().keys()) {\n syncSelectableElement(selection, id);\n }\n\n const onElementAdded = (id: string) => {\n syncSelectableElement(this.getSelectionBindingsContext(), id);\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n\n const onElementRemoved = (id: string) => {\n this.selectedIds.delete(id);\n detachSelectableElement(this.getSelectionBindingsContext(), id);\n updateBoundingBox(this.getSelectionStateContext());\n };\n ctx.events.on('element:removed', onElementRemoved);\n this.cleanupFns.push(() => ctx.events.off('element:removed', onElementRemoved));\n\n const onElementUpdated = (id: string) => {\n syncSelectableElement(this.getSelectionBindingsContext(), id);\n if (this.selectedIds.has(id)) {\n updateBoundingBox(this.getSelectionStateContext());\n }\n };\n ctx.events.on('element:updated', onElementUpdated);\n this.cleanupFns.push(() => ctx.events.off('element:updated', onElementUpdated));\n\n const stage = ctx.app.getPixiApp().stage;\n const onStagePointerDown = (e: FederatedPointerEvent) => {\n if (e.button === 0) {\n onStageClick(this.getSelectionStateContext());\n }\n };\n stage.on('pointerdown', onStagePointerDown);\n this.cleanupFns.push(() => stage.off('pointerdown', onStagePointerDown));\n\n this.shortcuts = new KeyboardShortcuts(ctx.app.getCanvas());\n this.shortcuts.register('delete', () => {\n void deleteSelected(this.actionsContext);\n });\n this.shortcuts.register('backspace', () => {\n void deleteSelected(this.actionsContext);\n });\n this.shortcuts.register('ctrl+c', () => copySelected(this.actionsContext));\n this.shortcuts.register('ctrl+v', () => {\n void pasteSelected(this.actionsContext);\n });\n this.shortcuts.register('ctrl+d', () => {\n void duplicateSelection(this.actionsContext);\n });\n }\n\n private setupHandleEvents(): void {\n for (const handle of this.boundingBox.getHandles()) {\n const handler = handle.handler;\n const position = handle.position;\n\n if (handler === 'delete') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n void deleteSelected(this.actionsContext);\n });\n } else if (handler === 'duplicate') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n void duplicateSelection(this.actionsContext);\n });\n } else if (handler === 'transform') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n startResize(this.gesturesContext, e, position);\n });\n } else if (handler === 'rotate') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n startRotate(this.gesturesContext, e);\n });\n } else if (typeof handler === 'function') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n handler({ selectedIds: [...this.selectedIds] });\n });\n }\n }\n }\n\n private attachHandlePointerDown(\n container: {\n on(event: 'pointerdown', handler: (e: FederatedPointerEvent) => void): void;\n off(event: 'pointerdown', handler: (e: FederatedPointerEvent) => void): void;\n },\n handler: (e: FederatedPointerEvent) => void,\n ): void {\n container.on('pointerdown', handler);\n this.cleanupFns.push(() => container.off('pointerdown', handler));\n }\n\n private isPanBlocked(): boolean {\n const camera = this.getCameraManager();\n return Boolean(camera?.isPanModifierActive() || camera?.isPanning());\n }\n\n setOverlayVisible(visible: boolean): void {\n if (visible) this.boundingBox.show();\n else this.boundingBox.hide();\n }\n\n select(idOrIds: string | readonly string[] | null): void {\n if (idOrIds === null) {\n setSelection(this.getSelectionStateContext(), null);\n return;\n }\n\n const ids = Array.isArray(idOrIds) ? idOrIds : [idOrIds];\n const nextSelectedIds: string[] = [];\n\n for (const id of ids) {\n if (this.ctx.registry.get(id)) {\n nextSelectedIds.push(id);\n }\n }\n\n setSelection(this.getSelectionStateContext(), nextSelectedIds);\n }\n\n async duplicate(): Promise<void> {\n await duplicateSelection(this.actionsContext);\n }\n\n getSelectedIds(): readonly string[] {\n return [...this.selectedIds];\n }\n\n getSelectedOptions(): BaseOptions[] {\n return getSelectedOptions(this.getSelectionStateContext());\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.ctx.getExtension<HistoryManager>('history');\n }\n\n private getCameraManager(): CameraManager | undefined {\n return this.ctx.getExtension<CameraManager>('camera');\n }\n\n private getSnapManager(): SnapManager | undefined {\n return this.ctx.getExtension<SnapManager>('snap');\n }\n\n private recordGroupUpdate(\n elements: readonly BaseElement<BaseOptions>[],\n beforeStates: Map<string, StartState | BaseOptions>,\n kind: 'move' | 'resize' | 'rotate',\n ): void {\n recordGroupUpdate(this.actionsContext, elements, beforeStates, kind);\n }\n\n destroy(): void {\n for (const id of this.selectableBindings.keys()) {\n detachSelectableElement(this.getSelectionBindingsContext(), id);\n }\n this.shortcuts?.destroy();\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n this.boundingBox?.destroy();\n }\n\n private createContexts(): void {\n this.selectionStateContext = {\n ctx: this.ctx,\n boundingBox: this.boundingBox,\n selectedIds: this.selectedIds,\n isPanBlocked: () => this.isPanBlocked(),\n };\n\n this.gesturesContext = {\n ctx: this.ctx,\n boundingBox: this.boundingBox,\n getCameraManager: () => this.getCameraManager(),\n getSnapManager: () => this.getSnapManager(),\n getSelectedIds: () => this.getSelectedIds(),\n getSelectedElements: () => getSelectedElements(this.selectionStateContext),\n updateBoundingBox: () => updateBoundingBox(this.selectionStateContext),\n recordGroupUpdate: (elements, beforeStates, kind) =>\n this.recordGroupUpdate(elements, beforeStates, kind),\n };\n\n this.selectionBindingsContext = {\n ctx: this.ctx,\n boundingBox: this.boundingBox,\n selectedIds: this.selectedIds,\n selectableBindings: this.selectableBindings,\n isPanBlocked: () => this.isPanBlocked(),\n startElementDrag: (e) => startElementDrag(this.gesturesContext, e),\n };\n\n this.actionsContext = {\n ctx: this.ctx,\n getHistoryManager: () => this.getHistoryManager(),\n getSelectedIds: () => this.getSelectedIds(),\n getSelectedElements: () => getSelectedElements(this.selectionStateContext),\n getSelectedOptions: () => getSelectedOptions(this.selectionStateContext),\n setSelection: (ids) => setSelection(this.selectionStateContext, ids),\n getClipboard: () => this.clipboard,\n setClipboard: (items) => {\n this.clipboard = items;\n },\n };\n }\n\n private getSelectionStateContext(): InteractionSelectionStateContext {\n return this.selectionStateContext;\n }\n\n private getSelectionBindingsContext(): InteractionSelectionBindingsContext {\n return this.selectionBindingsContext;\n }\n}\n","import type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\n\ntype LayerSnapshot = {\n id: string;\n zIndex: number;\n};\n\nexport class LayerCommand implements Command {\n readonly description = 'Change layer order';\n readonly kind = 'zOrder' as const;\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly before: readonly LayerSnapshot[],\n private readonly after: readonly LayerSnapshot[],\n ) {}\n\n async execute(): Promise<void> {\n this.apply(this.after);\n }\n\n async undo(): Promise<void> {\n this.apply(this.before);\n }\n\n private apply(snapshots: readonly LayerSnapshot[]): void {\n for (const snapshot of snapshots) {\n const el = this.ctx.registry.get(snapshot.id);\n if (!el) continue;\n el.setZIndex(snapshot.zIndex);\n this.ctx.events.emit('element:updated', snapshot.id);\n }\n\n this.ctx.events.emit('layer:changed');\n }\n}\n","import type { LayerManager } from '@/extensions/layering/LayerManager';\nimport type { LayeringAccessor } from '@/extensions/layering/types';\n\nexport function createLayeringAccessor(\n getManager: () => LayerManager | undefined,\n): LayeringAccessor {\n const call = <Args extends unknown[]>(invoke: (manager: LayerManager, ...args: Args) => void) => {\n return (...args: Args): void => {\n const manager = getManager();\n if (!manager) return;\n invoke(manager, ...args);\n };\n };\n\n return {\n bringToFront: call((manager, idOrIds) => manager.bringToFront(idOrIds)),\n sendToBack: call((manager, idOrIds) => manager.sendToBack(idOrIds)),\n bringForward: call((manager, id) => manager.bringForward(id)),\n sendBackward: call((manager, id) => manager.sendBackward(id)),\n normalizeZIndex: call((manager) => manager.normalizeZIndex()),\n };\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { LayerCommand } from '@/extensions/history/commands/LayerCommand';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport { createLayeringAccessor } from '@/extensions/layering/accessor';\n\nexport class LayerManager implements Extension {\n readonly name = 'layering';\n accessors?: { layer: ReturnType<typeof createLayeringAccessor> };\n private ctx!: EditorContext;\n private cleanupFns: Array<() => void> = [];\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n layer: createLayeringAccessor(() => ctx.getExtension<LayerManager>('layering')),\n };\n\n const onElementAdded = (id: string) => {\n const el = ctx.registry.get(id);\n if (el) this.assignTopZIndex(el);\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n }\n\n private assignTopZIndex(el: BaseElement<BaseOptions>): void {\n if ((el.getOptions().zIndex ?? 0) > 0) {\n return;\n }\n const max = this.getMaxZIndex();\n el.setZIndex(max + 1);\n }\n\n private getMaxZIndex(): number {\n let max = 0;\n for (const el of this.ctx.registry.getAll().values()) {\n const z = el.getDisplayObject().zIndex;\n if (z > max) max = z;\n }\n return max;\n }\n\n private getSortedElements(): BaseElement<BaseOptions>[] {\n return [...this.ctx.registry.getAll().values()].sort(\n (a, b) => a.getDisplayObject().zIndex - b.getDisplayObject().zIndex,\n );\n }\n\n private getLayerSnapshots(\n elements = this.getSortedElements(),\n ): Array<{ id: string; zIndex: number }> {\n return elements.map((el) => ({\n id: el.getId(),\n zIndex: el.getDisplayObject().zIndex,\n }));\n }\n\n private emitLayerChange(ids: readonly string[]): void {\n for (const id of ids) {\n this.ctx.events.emit('element:updated', id);\n }\n this.ctx.events.emit('layer:changed');\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.ctx.getExtension<HistoryManager>('history');\n }\n\n private trackLayerChange(mutate: () => void): void {\n const history = this.getHistoryManager();\n const before = this.getLayerSnapshots();\n mutate();\n const after = this.getLayerSnapshots();\n const changedIds = this.getChangedLayerIds(before, after);\n\n if (changedIds.length === 0) {\n return;\n }\n\n if (history?.shouldTrack('zOrder')) {\n history.record(new LayerCommand(this.ctx, before, after));\n }\n this.emitLayerChange(changedIds);\n }\n\n private getChangedLayerIds(\n before: readonly { id: string; zIndex: number }[],\n after: readonly { id: string; zIndex: number }[],\n ): string[] {\n const beforeMap = new Map(before.map((item) => [item.id, item.zIndex]));\n return after.filter((item) => beforeMap.get(item.id) !== item.zIndex).map((item) => item.id);\n }\n\n private normalizeIds(idOrIds: string | readonly string[]): string[] {\n return typeof idOrIds === 'string' ? [idOrIds] : [...idOrIds];\n }\n\n private reorderGroup(idOrIds: string | readonly string[], placement: 'front' | 'back'): void {\n const ids = this.normalizeIds(idOrIds);\n this.trackLayerChange(() => {\n const sorted = this.getSortedElements();\n const moving = sorted.filter((el) => ids.includes(el.getId()));\n const staying = sorted.filter((el) => !ids.includes(el.getId()));\n const ordered = placement === 'front' ? [...staying, ...moving] : [...moving, ...staying];\n\n let z = 1;\n for (const el of ordered) el.setZIndex(z++);\n });\n }\n\n bringToFront(idOrIds: string | readonly string[]): void {\n this.reorderGroup(idOrIds, 'front');\n }\n\n sendToBack(idOrIds: string | readonly string[]): void {\n this.reorderGroup(idOrIds, 'back');\n }\n\n private swapWithNeighbor(id: string, direction: 'forward' | 'backward'): void {\n this.trackLayerChange(() => {\n const sorted = this.getSortedElements();\n const index = sorted.findIndex((el) => el.getId() === id);\n const neighborIndex = direction === 'forward' ? index + 1 : index - 1;\n if (index < 0 || neighborIndex < 0 || neighborIndex >= sorted.length) {\n return;\n }\n\n const current = sorted[index];\n const neighbor = sorted[neighborIndex];\n if (!current || !neighbor) return;\n\n const currentZ = current.getDisplayObject().zIndex;\n current.setZIndex(neighbor.getDisplayObject().zIndex);\n neighbor.setZIndex(currentZ);\n });\n }\n\n bringForward(id: string): void {\n this.swapWithNeighbor(id, 'forward');\n }\n\n sendBackward(id: string): void {\n this.swapWithNeighbor(id, 'backward');\n }\n\n normalizeZIndex(): void {\n this.trackLayerChange(() => {\n const sorted = this.getSortedElements();\n sorted.forEach((el, i) => {\n el.setZIndex(i + 1);\n });\n });\n }\n\n destroy(): void {\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n }\n}\n","import type { PerformanceManager } from '@/extensions/performance/PerformanceManager';\nimport type { PerformanceAccessor } from '@/extensions/performance/types';\n\nexport function createPerformanceAccessor(\n getManager: () => PerformanceManager | undefined,\n): PerformanceAccessor {\n return {\n markDirty: (id) => getManager()?.dirtyTracker.markDirty(id),\n isDirty: (id) => getManager()?.dirtyTracker.isDirty(id) ?? false,\n flushDirty: () => getManager()?.dirtyTracker.flush() ?? [],\n clearDirty: () => getManager()?.dirtyTracker.clear(),\n\n retainAsset: (url) => getManager()?.cacheManager.retain(url),\n releaseAsset: async (url) => {\n const perf = getManager();\n if (!perf) return;\n await perf.cacheManager.release(url);\n },\n clearAssets: async () => {\n const perf = getManager();\n if (!perf) return;\n await perf.cacheManager.clear();\n },\n };\n}\n","import { Assets } from 'pixi.js';\n\nexport class CacheManager {\n private readonly trackedUrls = new Map<string, number>();\n\n retain(url: string): void {\n this.trackedUrls.set(url, (this.trackedUrls.get(url) ?? 0) + 1);\n }\n\n async release(url: string): Promise<void> {\n const count = this.trackedUrls.get(url);\n if (count === undefined) return;\n\n if (count <= 1) {\n this.trackedUrls.delete(url);\n try {\n await Assets.unload(url);\n } catch {\n // Texture may not have been loaded via Assets\n }\n } else {\n this.trackedUrls.set(url, count - 1);\n }\n }\n\n async clear(): Promise<void> {\n const urls = [...this.trackedUrls.keys()];\n this.trackedUrls.clear();\n await Promise.all(\n urls.map(async (url) => {\n try {\n await Assets.unload(url);\n } catch {\n // Texture may not have been loaded via Assets\n }\n }),\n );\n }\n}\n","export class DirtyTracker {\n private readonly dirtySet = new Set<string>();\n\n markDirty(id: string): void {\n this.dirtySet.add(id);\n }\n\n isDirty(id: string): boolean {\n return this.dirtySet.has(id);\n }\n\n flush(): readonly string[] {\n const ids = [...this.dirtySet];\n this.dirtySet.clear();\n return ids;\n }\n\n clear(): void {\n this.dirtySet.clear();\n }\n}\n","import type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createPerformanceAccessor } from '@/extensions/performance/accessor';\nimport { CacheManager } from '@/extensions/performance/CacheManager';\nimport { DirtyTracker } from '@/extensions/performance/DirtyTracker';\n\nexport class PerformanceManager implements Extension {\n readonly name = 'performance';\n accessors?: { performance: ReturnType<typeof createPerformanceAccessor> };\n readonly dirtyTracker = new DirtyTracker();\n readonly cacheManager = new CacheManager();\n private cleanupFns: Array<() => void> = [];\n\n init(ctx: EditorContext): void {\n this.accessors = {\n performance: createPerformanceAccessor(() =>\n ctx.getExtension<PerformanceManager>('performance'),\n ),\n };\n\n const onElementUpdated = (id: string) => {\n this.dirtyTracker.markDirty(id);\n };\n ctx.events.on('element:updated', onElementUpdated);\n this.cleanupFns.push(() => ctx.events.off('element:updated', onElementUpdated));\n }\n\n destroy(): void {\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n this.dirtyTracker.clear();\n void this.cacheManager.clear();\n }\n}\n","import type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializerAccessor } from '@/extensions/serialization/types';\n\nexport function createSerializerAccessor(\n getManager: () => SerializationManager | undefined,\n): SerializerAccessor {\n return {\n serialize: () => getManager()?.serializeAll() ?? [],\n append: async (data) => {\n const manager = getManager();\n if (!manager) return;\n await manager.appendAll(data);\n },\n replace: async (data) => {\n const manager = getManager();\n if (!manager) return;\n await manager.replaceAll(data);\n },\n\n serializeElement: (element) => {\n const manager = getManager();\n if (!manager) {\n throw new Error('Serialization extension is unavailable.');\n }\n return manager.serialize(element);\n },\n registerAdapter: (adapter) => getManager()?.registerAdapter(adapter),\n };\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { SerializationAdapter } from '@/extensions/serialization/types';\n\nexport function createDefaultSerializationAdapters(ctx: EditorContext): SerializationAdapter[] {\n const registryBackedTypes = [\n 'text',\n 'image',\n 'svg',\n 'shape:rectangle',\n 'shape:circle',\n 'shape:star',\n 'shape:line',\n ] as const;\n\n const registryAdapters = registryBackedTypes.map(\n (type): SerializationAdapter<BaseOptions> => ({\n type,\n serialize: (element) => element.getOptions(),\n deserialize: (data) => ctx.registry.createFromOptions(data),\n }),\n );\n\n return registryAdapters;\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createSerializerAccessor } from '@/extensions/serialization/accessor';\nimport { createDefaultSerializationAdapters } from '@/extensions/serialization/defaultAdapters';\nimport type { SerializationAdapter, SerializedElement } from '@/extensions/serialization/types';\n\ntype RegisteredSerializationAdapter = {\n readonly type: string;\n serialize(element: BaseElement<BaseOptions>): SerializedElement;\n deserialize(data: SerializedElement): BaseElement<BaseOptions>;\n};\n\nexport class SerializationManager implements Extension {\n readonly name = 'serialization';\n accessors?: { serializer: ReturnType<typeof createSerializerAccessor> };\n private ctx!: EditorContext;\n private readonly adapters = new Map<string, RegisteredSerializationAdapter>();\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.registerDefaultAdapters();\n this.accessors = {\n serializer: createSerializerAccessor(() =>\n ctx.getExtension<SerializationManager>('serialization'),\n ),\n };\n }\n\n private registerDefaultAdapters(): void {\n for (const adapter of createDefaultSerializationAdapters(this.ctx)) {\n this.registerAdapter(adapter);\n }\n }\n\n registerAdapter<T extends BaseOptions>(adapter: SerializationAdapter<T>): void {\n if (this.adapters.has(adapter.type)) {\n throw new Error(`A serialization adapter is already registered for \"${adapter.type}\".`);\n }\n\n this.adapters.set(adapter.type, {\n type: adapter.type,\n serialize: (element) => adapter.serialize(element as BaseElement<T>) as SerializedElement,\n deserialize: (data) => adapter.deserialize(data as T),\n });\n }\n\n serialize(element: BaseElement<BaseOptions>): SerializedElement {\n const adapter = this.adapters.get(element.getType());\n if (!adapter) {\n throw new Error(`No serialization adapter registered for \"${element.getType()}\".`);\n }\n return adapter.serialize(element) as unknown as SerializedElement;\n }\n\n serializeAll(): SerializedElement[] {\n return [...this.ctx.registry.getAll().values()].map((el) => this.serialize(el));\n }\n\n async appendAll(data: SerializedElement[]): Promise<void> {\n const elements = data.map((opts, index) => this.deserializeElement(opts, index));\n for (const element of elements) {\n await this.ctx.addElement(element);\n }\n }\n\n async replaceAll(data: SerializedElement[]): Promise<void> {\n const previousScene = this.serializeAll();\n this.ctx.clearElements();\n try {\n await this.appendAll(data);\n } catch (error) {\n try {\n this.ctx.clearElements();\n await this.appendAll(previousScene);\n } catch (restoreError) {\n const importMessage = (error instanceof Error ? error.message : String(error)).replace(\n /\\.+$/,\n '',\n );\n const restoreMessage = (\n restoreError instanceof Error ? restoreError.message : String(restoreError)\n ).replace(/\\.+$/, '');\n throw new Error(\n `Failed to replace scene and restore the previous scene. Import error: ${importMessage}. Restore error: ${restoreMessage}.`,\n );\n }\n throw error;\n }\n }\n\n private deserializeElement(opts: SerializedElement, index: number): BaseElement<BaseOptions> {\n const type = opts.type;\n if (!type) {\n throw new Error(`Serialized element at index ${index} is missing \"type\".`);\n }\n const adapter = this.adapters.get(type);\n if (!adapter) {\n throw new Error(`No serialization adapter registered for \"${type}\".`);\n }\n return adapter.deserialize(opts);\n }\n}\n","export interface SnapConfig {\n grid?: boolean;\n objects?: boolean;\n edges?: boolean;\n guides?: boolean;\n threshold?: number;\n lineColor?: number | string;\n lineAlpha?: number;\n lineWidth?: number;\n}\n\nexport interface Guide {\n id: string;\n orientation: 'vertical' | 'horizontal';\n position: number;\n}\n\nexport interface SnapTarget {\n type: 'grid' | 'object' | 'edge' | 'guide';\n reference?: string;\n}\n\nexport interface SnapResult {\n x: number;\n y: number;\n snapped: boolean;\n xSnapped: boolean;\n ySnapped: boolean;\n lineX?: number;\n lineY?: number;\n xTarget?: SnapTarget;\n yTarget?: SnapTarget;\n}\n\nexport type SnapAnchor = 'min' | 'center' | 'max';\n\nexport type InternalSnapResult = SnapResult & {\n xAnchor?: SnapAnchor;\n yAnchor?: SnapAnchor;\n};\n\nexport interface ResolveOptions {\n width?: number;\n height?: number;\n exclude?: string[];\n}\n\nexport interface SnapState {\n config: Required<SnapConfig>;\n guides: Guide[];\n}\n\nexport type SnapAccessor = {\n resolve(x: number, y: number, opts?: ResolveOptions): SnapResult;\n showLines(result: SnapResult): void;\n hideLines(): void;\n addGuide(guide: Guide): void;\n removeGuide(id: string): void;\n clearGuides(): void;\n configure(patch: Partial<SnapConfig>): void;\n getState(): SnapState;\n};\n\nexport interface SnapLineStyle {\n color: number | string;\n alpha: number;\n width: number;\n}\n\nexport const DEFAULT_SNAP_CONFIG: Required<SnapConfig> = {\n grid: true,\n objects: true,\n edges: true,\n guides: true,\n threshold: 8,\n lineColor: 0x1a73e8,\n lineAlpha: 0.75,\n lineWidth: 1,\n};\n","import type { SnapManager } from '@/extensions/snap/SnapManager';\nimport { DEFAULT_SNAP_CONFIG, type SnapAccessor, type SnapState } from '@/extensions/snap/types';\n\nconst EMPTY_STATE: SnapState = {\n config: { ...DEFAULT_SNAP_CONFIG },\n guides: [],\n};\n\nexport function createSnapAccessor(getManager: () => SnapManager | undefined): SnapAccessor {\n return {\n resolve: (x, y, opts) => {\n const snap = getManager();\n if (!snap) {\n return {\n x,\n y,\n snapped: false,\n xSnapped: false,\n ySnapped: false,\n };\n }\n const result = snap.resolve(x, y, opts);\n return {\n x: result.x,\n y: result.y,\n snapped: result.snapped,\n xSnapped: result.xSnapped,\n ySnapped: result.ySnapped,\n lineX: result.lineX,\n lineY: result.lineY,\n xTarget: result.xTarget,\n yTarget: result.yTarget,\n };\n },\n showLines: (result) => getManager()?.showLines(result),\n hideLines: () => getManager()?.hideLines(),\n\n addGuide: (guide) => getManager()?.addGuide(guide),\n removeGuide: (id) => getManager()?.removeGuide(id),\n clearGuides: () => getManager()?.clearGuides(),\n\n configure: (patch) => getManager()?.configure(patch),\n getState: () => getManager()?.getState() ?? EMPTY_STATE,\n };\n}\n","import { Container, Graphics } from 'pixi.js';\nimport type { SnapLineStyle } from '@/extensions/snap/types';\n\nconst DEFAULT_LINE_STYLE: SnapLineStyle = {\n color: 0x1a73e8,\n alpha: 0.75,\n width: 1,\n};\n\nexport class SnapLines {\n private readonly container: Container;\n private readonly vLine: Graphics;\n private readonly hLine: Graphics;\n private style: SnapLineStyle;\n\n constructor(stage: Container, style: Partial<SnapLineStyle> = {}) {\n this.vLine = new Graphics();\n this.hLine = new Graphics();\n this.container = new Container();\n this.style = { ...DEFAULT_LINE_STYLE, ...style };\n this.container.addChild(this.vLine, this.hLine);\n this.container.visible = false;\n this.container.eventMode = 'none';\n // Sit just below the bounding box overlay\n this.container.zIndex = Number.MAX_SAFE_INTEGER - 1;\n stage.addChild(this.container);\n }\n\n setStyle(style: Partial<SnapLineStyle>): void {\n this.style = { ...this.style, ...style };\n }\n\n update(\n lineX: number | undefined,\n lineY: number | undefined,\n width: number,\n height: number,\n offsetX = 0,\n offsetY = 0,\n ): void {\n this.vLine.clear();\n this.hLine.clear();\n\n if (lineX !== undefined) {\n this.vLine\n .moveTo(lineX, offsetY)\n .lineTo(lineX, offsetY + height)\n .stroke({\n color: this.style.color,\n alpha: this.style.alpha,\n width: this.style.width,\n });\n }\n\n if (lineY !== undefined) {\n this.hLine\n .moveTo(offsetX, lineY)\n .lineTo(offsetX + width, lineY)\n .stroke({\n color: this.style.color,\n alpha: this.style.alpha,\n width: this.style.width,\n });\n }\n\n this.container.visible = lineX !== undefined || lineY !== undefined;\n }\n\n hide(): void {\n this.container.visible = false;\n }\n\n destroy(): void {\n this.container.destroy({ children: true });\n }\n}\n","import type { Bounds } from 'pixi.js';\nimport type { ElementRegistry } from '@/core/ElementRegistry';\nimport type {\n Guide,\n InternalSnapResult,\n ResolveOptions,\n SnapAnchor,\n SnapConfig,\n SnapTarget,\n} from '@/extensions/snap/types';\n\ninterface AxisSnap {\n value: number;\n linePos: number;\n target: SnapTarget;\n anchor: SnapAnchor;\n}\n\ninterface AxisSnapCandidate {\n snap: AxisSnap | null;\n distance: number;\n}\n\nexport function resolveSnap(\n config: Required<SnapConfig>,\n guides: ReadonlyMap<string, Guide>,\n registry: ElementRegistry,\n getGridCellSize: () => number,\n getElementBounds: (id: string) => Bounds | null,\n x: number,\n y: number,\n opts: ResolveOptions = {},\n): InternalSnapResult {\n const { width = 0, height = 0, exclude = [] } = opts;\n const { threshold } = config;\n\n const xMid = x + width / 2;\n const xMax = x + width;\n const yMid = y + height / 2;\n const yMax = y + height;\n\n let snapX: AxisSnap | undefined;\n let snapY: AxisSnap | undefined;\n\n if (config.guides && guides.size > 0) {\n snapX = resolveGuideAxis(\n guides,\n 'vertical',\n { value: x, anchor: 'min' },\n { value: xMid, anchor: 'center' },\n { value: xMax, anchor: 'max' },\n x,\n threshold,\n );\n snapY = resolveGuideAxis(\n guides,\n 'horizontal',\n { value: y, anchor: 'min' },\n { value: yMid, anchor: 'center' },\n { value: yMax, anchor: 'max' },\n y,\n threshold,\n );\n }\n\n if (config.objects || config.edges) {\n const excludeSet = new Set(exclude);\n for (const [id] of registry.getAll()) {\n if (excludeSet.has(id)) continue;\n const bounds = getElementBounds(id);\n if (!bounds) continue;\n\n if (!snapX) {\n const hit = resolveObjectAxis(\n config,\n { value: x, anchor: 'min' },\n { value: xMid, anchor: 'center' },\n { value: xMax, anchor: 'max' },\n x,\n bounds.x,\n bounds.x + bounds.width / 2,\n bounds.x + bounds.width,\n threshold,\n id,\n );\n if (hit) snapX = hit;\n }\n\n if (!snapY) {\n const hit = resolveObjectAxis(\n config,\n { value: y, anchor: 'min' },\n { value: yMid, anchor: 'center' },\n { value: yMax, anchor: 'max' },\n y,\n bounds.y,\n bounds.y + bounds.height / 2,\n bounds.y + bounds.height,\n threshold,\n id,\n );\n if (hit) snapY = hit;\n }\n\n if (snapX && snapY) break;\n }\n }\n\n if (config.grid) {\n const cell = getGridCellSize();\n if (!snapX) {\n snapX = resolveGridAxis(\n cell,\n threshold,\n { value: x, anchor: 'min' },\n { value: xMid, anchor: 'center' },\n { value: xMax, anchor: 'max' },\n x,\n );\n }\n if (!snapY) {\n snapY = resolveGridAxis(\n cell,\n threshold,\n { value: y, anchor: 'min' },\n { value: yMid, anchor: 'center' },\n { value: yMax, anchor: 'max' },\n y,\n );\n }\n }\n\n return {\n x: snapX?.value ?? x,\n y: snapY?.value ?? y,\n snapped: !!(snapX || snapY),\n xSnapped: !!snapX,\n ySnapped: !!snapY,\n lineX: snapX?.linePos,\n lineY: snapY?.linePos,\n xTarget: snapX?.target,\n yTarget: snapY?.target,\n xAnchor: snapX?.anchor,\n yAnchor: snapY?.anchor,\n };\n}\n\nfunction resolveGridAxis(\n cellSize: number,\n threshold: number,\n anchor1: { value: number; anchor: SnapAnchor },\n anchor2: { value: number; anchor: SnapAnchor },\n anchor3: { value: number; anchor: SnapAnchor },\n base: number,\n): AxisSnap | undefined {\n let best: AxisSnapCandidate = { snap: null, distance: Infinity };\n\n best = updateGridAxisSnap(best, cellSize, threshold, anchor1, base);\n best = updateGridAxisSnap(best, cellSize, threshold, anchor2, base);\n best = updateGridAxisSnap(best, cellSize, threshold, anchor3, base);\n\n return best.snap ?? undefined;\n}\n\nfunction resolveGuideAxis(\n guides: ReadonlyMap<string, Guide>,\n orientation: Guide['orientation'],\n anchor1: { value: number; anchor: SnapAnchor },\n anchor2: { value: number; anchor: SnapAnchor },\n anchor3: { value: number; anchor: SnapAnchor },\n base: number,\n threshold: number,\n): AxisSnap | undefined {\n let best: AxisSnapCandidate = { snap: null, distance: Infinity };\n\n for (const guide of guides.values()) {\n if (guide.orientation !== orientation) continue;\n best = updateBestAxisSnap(best, guide.position, threshold, anchor1, guide.id, base, 'guide');\n best = updateBestAxisSnap(best, guide.position, threshold, anchor2, guide.id, base, 'guide');\n best = updateBestAxisSnap(best, guide.position, threshold, anchor3, guide.id, base, 'guide');\n }\n\n return best.snap ?? undefined;\n}\n\nfunction resolveObjectAxis(\n config: Required<SnapConfig>,\n anchor1: { value: number; anchor: SnapAnchor },\n anchor2: { value: number; anchor: SnapAnchor },\n anchor3: { value: number; anchor: SnapAnchor },\n base: number,\n edge1: number,\n center: number,\n edge2: number,\n threshold: number,\n elementId: string,\n): AxisSnap | null {\n let best: AxisSnapCandidate = { snap: null, distance: Infinity };\n\n if (config.edges) {\n best = updateBestAxisSnap(best, edge1, threshold, anchor1, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge1, threshold, anchor2, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge1, threshold, anchor3, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge2, threshold, anchor1, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge2, threshold, anchor2, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge2, threshold, anchor3, elementId, base, 'edge');\n }\n\n if (config.objects) {\n best = updateBestAxisSnap(best, center, threshold, anchor1, elementId, base, 'object');\n best = updateBestAxisSnap(best, center, threshold, anchor2, elementId, base, 'object');\n best = updateBestAxisSnap(best, center, threshold, anchor3, elementId, base, 'object');\n }\n\n return best.snap;\n}\n\nfunction updateBestAxisSnap(\n current: AxisSnapCandidate,\n targetPos: number,\n threshold: number,\n source: { value: number; anchor: SnapAnchor },\n reference: string,\n base: number,\n type: SnapTarget['type'],\n): AxisSnapCandidate {\n const distance = Math.abs(source.value - targetPos);\n if (distance > threshold || distance >= current.distance) {\n return current;\n }\n\n return {\n distance,\n snap: {\n value: base + (targetPos - source.value),\n linePos: targetPos,\n target: { type, reference },\n anchor: source.anchor,\n },\n };\n}\n\nfunction updateGridAxisSnap(\n current: AxisSnapCandidate,\n cellSize: number,\n threshold: number,\n source: { value: number; anchor: SnapAnchor },\n base: number,\n): AxisSnapCandidate {\n const gridPos = Math.round(source.value / cellSize) * cellSize;\n const distance = Math.abs(source.value - gridPos);\n if (distance > threshold || distance >= current.distance) {\n return current;\n }\n\n return {\n distance,\n snap: {\n value: base + (gridPos - source.value),\n linePos: gridPos,\n target: { type: 'grid' },\n anchor: source.anchor,\n },\n };\n}\n","import { getCanvasWorldBounds, getElementWorldBounds } from '@/core/canvasBounds';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { Extension } from '@/extensions/Extension';\nimport type { GridManager } from '@/extensions/grid/GridManager';\nimport { createSnapAccessor } from '@/extensions/snap/accessor';\nimport { SnapLines } from '@/extensions/snap/SnapLines';\nimport { resolveSnap } from '@/extensions/snap/SnapResolver';\nimport {\n DEFAULT_SNAP_CONFIG,\n type Guide,\n type InternalSnapResult,\n type ResolveOptions,\n type SnapConfig,\n type SnapResult,\n type SnapState,\n} from '@/extensions/snap/types';\n\nexport class SnapManager implements Extension {\n readonly name = 'snap';\n accessors?: { snap: ReturnType<typeof createSnapAccessor> };\n private cfg: Required<SnapConfig>;\n private ctx!: EditorContext;\n private guides = new Map<string, Guide>();\n private lines?: SnapLines;\n\n constructor(config: SnapConfig = {}) {\n this.cfg = { ...DEFAULT_SNAP_CONFIG, ...config };\n }\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n const pixi = ctx.app.getPixiApp();\n this.lines = new SnapLines(pixi.stage, {\n color: this.cfg.lineColor,\n alpha: this.cfg.lineAlpha,\n width: this.cfg.lineWidth,\n });\n this.accessors = {\n snap: createSnapAccessor(() => ctx.getExtension<SnapManager>('snap')),\n };\n }\n\n // ─── Main API ─────────────────────────────────────────────────────────────\n\n resolve(x: number, y: number, opts: ResolveOptions = {}): InternalSnapResult {\n return resolveSnap(\n this.cfg,\n this.guides,\n this.ctx.registry,\n () => this.getGridCellSize(),\n (id) => {\n const element = this.ctx.registry.get(id);\n return element ? getElementWorldBounds(this.ctx, element) : null;\n },\n x,\n y,\n opts,\n );\n }\n\n showLines(result: SnapResult): void {\n const visibleBounds = getCanvasWorldBounds(this.ctx);\n const { lineX, lineY } = this.toScreenLinePositions(result.lineX, result.lineY);\n const topLeft = this.toScreenPoint(visibleBounds.x, visibleBounds.y);\n const bottomRight = this.toScreenPoint(\n visibleBounds.x + visibleBounds.width,\n visibleBounds.y + visibleBounds.height,\n );\n this.lines?.update(\n lineX,\n lineY,\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y,\n topLeft.x,\n topLeft.y,\n );\n }\n\n hideLines(): void {\n this.lines?.hide();\n }\n\n // ─── Guide management ─────────────────────────────────────────────────────\n\n addGuide(guide: Guide): void {\n this.guides.set(guide.id, guide);\n }\n\n removeGuide(id: string): void {\n this.guides.delete(id);\n }\n\n clearGuides(): void {\n this.guides.clear();\n }\n\n // ─── Runtime config ───────────────────────────────────────────────────────\n\n configure(patch: Partial<SnapConfig>): void {\n Object.assign(this.cfg, patch);\n this.lines?.setStyle({\n color: this.cfg.lineColor,\n alpha: this.cfg.lineAlpha,\n width: this.cfg.lineWidth,\n });\n }\n\n getState(): SnapState {\n return {\n config: { ...this.cfg },\n guides: [...this.guides.values()].map((guide) => ({ ...guide })),\n };\n }\n\n private getGridCellSize(): number {\n const grid = this.ctx.getExtension<GridManager>('grid');\n return grid?.getState().cellSize ?? 20;\n }\n\n private toScreenLinePositions(\n lineX: number | undefined,\n lineY: number | undefined,\n ): { lineX: number | undefined; lineY: number | undefined } {\n return {\n lineX: lineX === undefined ? undefined : this.toScreenPoint(lineX, 0).x,\n lineY: lineY === undefined ? undefined : this.toScreenPoint(0, lineY).y,\n };\n }\n\n private toScreenPoint(x: number, y: number): { x: number; y: number } {\n const camera = this.ctx.getExtension<CameraManager>('camera');\n if (!camera) {\n return { x, y };\n }\n return camera.worldToScreen(x, y);\n }\n\n destroy(): void {\n this.guides.clear();\n this.lines?.destroy();\n this.lines = undefined;\n }\n}\n","import type { ExtensionsConfig } from '@/canvas/EditorKitOptions';\nimport { AlignmentManager } from '@/extensions/alignment/AlignmentManager';\nimport { CameraManager } from '@/extensions/camera/CameraManager';\nimport { ContextMenuManager } from '@/extensions/contextMenu/ContextMenuManager';\nimport type { Extension } from '@/extensions/Extension';\nimport { ExportManager } from '@/extensions/export/ExportManager';\nimport { FontManager } from '@/extensions/fonts/FontManager';\nimport { GridManager } from '@/extensions/grid/GridManager';\nimport { HistoryManager } from '@/extensions/history/HistoryManager';\nimport { InteractionManager } from '@/extensions/interaction/InteractionManager';\nimport { LayerManager } from '@/extensions/layering/LayerManager';\nimport { PerformanceManager } from '@/extensions/performance/PerformanceManager';\nimport { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport { SnapManager } from '@/extensions/snap/SnapManager';\n\nexport function buildExtensionList(config: ExtensionsConfig = {}): Extension[] {\n const extensions: Extension[] = [];\n const isEnabled = (key: keyof ExtensionsConfig): boolean => config[key] !== false;\n const pushIfEnabled = (key: keyof ExtensionsConfig, extension: Extension): void => {\n if (isEnabled(key)) {\n extensions.push(extension);\n }\n };\n const pushIfConfigured = <TConfig>(\n value: boolean | TConfig | undefined,\n create: (config: TConfig | undefined) => Extension,\n ): void => {\n if (value) {\n extensions.push(create(typeof value === 'object' ? value : undefined));\n }\n };\n\n pushIfEnabled('layering', new LayerManager());\n pushIfEnabled('alignment', new AlignmentManager());\n pushIfEnabled(\n 'history',\n new HistoryManager(typeof config.history === 'object' ? config.history : {}),\n );\n pushIfEnabled('serialization', new SerializationManager());\n pushIfEnabled('interaction', new InteractionManager());\n pushIfEnabled('contextMenu', new ContextMenuManager());\n pushIfEnabled('fonts', new FontManager());\n pushIfEnabled('performance', new PerformanceManager());\n pushIfEnabled('export', new ExportManager());\n pushIfConfigured(config.camera, (cameraConfig) => new CameraManager(cameraConfig ?? {}));\n pushIfConfigured(config.grid, (gridConfig) => new GridManager(gridConfig ?? {}));\n pushIfConfigured(config.snap, (snapConfig) => new SnapManager(snapConfig ?? {}));\n\n return extensions;\n}\n","import type { EditorKitOptions } from '@/canvas/EditorKitOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { buildExtensionList } from '@/extensions';\n\nexport function loadExtensions(params: {\n ctx: EditorContext;\n options: EditorKitOptions;\n extensions: Map<string, unknown>;\n target: object;\n}): void {\n const list = buildExtensionList(params.options.extensions ?? {});\n for (const ext of list) {\n ext.init(params.ctx);\n if (ext.accessors) {\n Object.assign(params.target, ext.accessors);\n }\n params.extensions.set(ext.name, ext);\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\n\nexport type ElementFactory = (options: BaseOptions) => BaseElement<BaseOptions>;\n\nexport class ElementRegistry {\n private readonly elements = new Map<string, BaseElement<BaseOptions>>();\n private readonly factories = new Map<string, ElementFactory>();\n\n registerFactory(type: string, factory: ElementFactory): void {\n this.factories.set(type, factory);\n }\n\n add(element: BaseElement<BaseOptions>): void {\n this.elements.set(element.getId(), element);\n }\n\n get(id: string): BaseElement<BaseOptions> | undefined {\n return this.elements.get(id);\n }\n\n has(id: string): boolean {\n return this.elements.has(id);\n }\n\n remove(id: string): BaseElement<BaseOptions> | undefined {\n const el = this.elements.get(id);\n if (el) this.elements.delete(id);\n return el;\n }\n\n getAll(): ReadonlyMap<string, BaseElement<BaseOptions>> {\n return this.elements;\n }\n\n clear(): void {\n this.elements.clear();\n }\n\n createFromOptions(options: BaseOptions): BaseElement<BaseOptions> {\n const factory = this.factories.get(options.type);\n if (!factory) {\n throw new Error(`No factory registered for element type: \"${options.type}\"`);\n }\n return factory(options);\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import EventEmitter from 'eventemitter3';\n\nexport type CameraState = { zoom: number; x: number; y: number };\n\nexport type EditorEventMap = {\n 'element:added': [id: string];\n 'element:removed': [id: string];\n 'element:updated': [id: string];\n 'element:selected': [ids: string | readonly string[] | null];\n 'history:changed': [];\n 'layer:changed': [];\n 'camera:changed': [state: CameraState];\n};\n\nexport class EditorEventBus {\n private readonly bus = new EventEmitter();\n\n emit<K extends keyof EditorEventMap>(event: K, ...args: EditorEventMap[K]): void {\n this.bus.emit(event, ...args);\n }\n\n on<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): void {\n this.bus.on(event, listener as (...args: unknown[]) => void);\n }\n\n off<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): void {\n this.bus.off(event, listener as (...args: unknown[]) => void);\n }\n}\n","import { Application } from '@/canvas/Application';\nimport {\n addWithHistory,\n clearElements,\n getElementSnapshot,\n removeWithHistory,\n updateWithHistory,\n} from '@/canvas/EditorKitActions';\nimport type { EditorKitOptions } from '@/canvas/EditorKitOptions';\nimport { loadElements } from '@/canvas/ElementLoader';\nimport { loadExtensions } from '@/canvas/ExtensionLoader';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { constrainElementToCanvas, isCanvasConstraintEnabled } from '@/core/canvasBounds';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { ElementRegistry } from '@/core/ElementRegistry';\nimport { EditorEventBus, type EditorEventMap } from '@/core/Events';\nimport { createAlignmentAccessor } from '@/extensions/alignment/accessor';\nimport type { AlignmentAccessor } from '@/extensions/alignment/types';\nimport { createCameraAccessor } from '@/extensions/camera/accessor';\nimport type { CameraAccessor } from '@/extensions/camera/types';\nimport { createContextMenuAccessor } from '@/extensions/contextMenu/accessor';\nimport type { ContextMenuAccessor } from '@/extensions/contextMenu/types';\nimport { createExportAccessor } from '@/extensions/export/accessor';\nimport type { ExportAccessor } from '@/extensions/export/types';\nimport { createFontsAccessor } from '@/extensions/fonts/accessor';\nimport type { FontsAccessor } from '@/extensions/fonts/types';\nimport { createGridAccessor } from '@/extensions/grid/accessor';\nimport type { GridAccessor } from '@/extensions/grid/types';\nimport { createHistoryAccessor } from '@/extensions/history/accessor';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { HistoryAccessor, HistoryTrack } from '@/extensions/history/types';\nimport { createInteractionAccessor } from '@/extensions/interaction/accessor';\nimport type { InteractionAccessor } from '@/extensions/interaction/types';\nimport { createLayeringAccessor } from '@/extensions/layering/accessor';\nimport type { LayeringAccessor } from '@/extensions/layering/types';\nimport { createPerformanceAccessor } from '@/extensions/performance/accessor';\nimport type { PerformanceAccessor } from '@/extensions/performance/types';\nimport { createSerializerAccessor } from '@/extensions/serialization/accessor';\nimport type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializedElement, SerializerAccessor } from '@/extensions/serialization/types';\nimport { createSnapAccessor } from '@/extensions/snap/accessor';\nimport type { SnapAccessor } from '@/extensions/snap/types';\n\nexport class EditorKit {\n public readonly ready: Promise<void>;\n readonly history: HistoryAccessor;\n readonly alignment: AlignmentAccessor;\n readonly layer: LayeringAccessor;\n readonly interaction: InteractionAccessor;\n readonly camera: CameraAccessor;\n readonly contextMenu: ContextMenuAccessor;\n readonly export: ExportAccessor;\n readonly fonts: FontsAccessor;\n readonly grid: GridAccessor;\n readonly performance: PerformanceAccessor;\n readonly serializer: SerializerAccessor;\n readonly snap: SnapAccessor;\n\n private readonly app: Application;\n private readonly registry: ElementRegistry;\n private readonly events: EditorEventBus;\n private readonly editorOptions: EditorKitOptions;\n private readonly extensions = new Map<string, unknown>();\n private ctx!: EditorContext;\n private destroyed = false;\n\n constructor(container: HTMLElement, options: EditorKitOptions = {}) {\n this.editorOptions = options;\n this.events = new EditorEventBus();\n this.registry = new ElementRegistry();\n this.history = createHistoryAccessor(() => this.getHistoryManager());\n this.alignment = createAlignmentAccessor(() => this.getExtension('alignment'));\n this.layer = createLayeringAccessor(() => this.getExtension('layering'));\n this.interaction = createInteractionAccessor({\n ctx: {\n getElement: (id) => this.registry.get(id),\n } as EditorContext,\n getManager: () => this.getExtension('interaction'),\n });\n this.camera = createCameraAccessor(() => this.getExtension('camera'));\n this.contextMenu = createContextMenuAccessor(() => this.getExtension('contextMenu'));\n this.export = createExportAccessor(() => this.getExtension('export'));\n this.fonts = createFontsAccessor(() => this.getExtension('fonts'));\n this.grid = createGridAccessor(() => this.getExtension('grid'));\n this.performance = createPerformanceAccessor(() => this.getExtension('performance'));\n this.serializer = createSerializerAccessor(() => this.getSerializationManager());\n this.snap = createSnapAccessor(() => this.getExtension('snap'));\n this.app = new Application(container, {\n width: options.width,\n height: options.height,\n backgroundColor: options.backgroundColor,\n });\n this.ready = this.app.ready.then(async () => {\n if (this.destroyed) return;\n await this.initExtensions();\n });\n }\n\n private async initExtensions(): Promise<void> {\n loadElements(this.registry);\n this.ctx = this.buildContext();\n loadExtensions({\n ctx: this.ctx,\n options: this.editorOptions,\n extensions: this.extensions,\n target: this,\n });\n }\n\n private buildContext(): EditorContext {\n return {\n app: this.app,\n registry: this.registry,\n events: this.events,\n options: this.editorOptions,\n stage: this.app.getPixiApp().stage,\n getElement: (id) => this.registry.get(id),\n addElement: (el) => this.addElement(el),\n removeElement: (id) => this.removeElement(id),\n clearElements: () => clearElements(this.registry, (id) => this.removeElement(id)),\n getExtension: <T>(name: string) => this.extensions.get(name) as T | undefined,\n hasExtension: (name: string) => this.extensions.has(name),\n };\n }\n\n private async addElement(element: BaseElement<BaseOptions>): Promise<void> {\n const existing = this.registry.get(element.getId());\n if (existing) {\n await existing.update(element.getOptions());\n this.events.emit('element:updated', element.getId());\n } else {\n const screen = this.app.getPixiApp().screen;\n element.applyDefaultPosition(screen.width / 2, screen.height / 2);\n await element.init();\n this.registry.add(element);\n this.app.getPixiApp().stage.addChild(element.getDisplayObject());\n this.events.emit('element:added', element.getId());\n }\n }\n\n private removeElement(id: string): void {\n const el = this.registry.remove(id);\n if (el) {\n this.app.getPixiApp().stage.removeChild(el.getDisplayObject());\n el.destroy();\n this.events.emit('element:removed', id);\n }\n }\n\n private async updateElement(\n el: BaseElement<BaseOptions>,\n next: Partial<BaseOptions>,\n ): Promise<void> {\n await el.update(next);\n if (isCanvasConstraintEnabled(this.ctx) && this.shouldConstrainAfterUpdate(next)) {\n await constrainElementToCanvas(this.ctx, el);\n }\n this.events.emit('element:updated', el.getId());\n }\n\n private shouldConstrainAfterUpdate(next: Partial<BaseOptions>): boolean {\n const keys = Object.keys(next);\n return keys.some(\n (key) =>\n key === 'x' ||\n key === 'y' ||\n key === 'scaleX' ||\n key === 'scaleY' ||\n key === 'rotationDeg' ||\n key === 'width' ||\n key === 'height',\n );\n }\n\n private getUpdateKind(\n el: BaseElement<BaseOptions>,\n next: Partial<BaseOptions>,\n ): Exclude<HistoryTrack, 'add' | 'remove'> | null {\n const keys = Object.keys(next) as Array<keyof BaseOptions>;\n\n if (keys.length === 0) {\n return null;\n }\n\n if (keys.every((key) => key === 'x' || key === 'y')) {\n return 'move';\n }\n\n if (keys.every((key) => key === 'rotationDeg')) {\n return 'rotate';\n }\n\n if (keys.every((key) => key === 'zIndex')) {\n return 'zOrder';\n }\n\n if (el.getType() === 'text') {\n return 'text';\n }\n\n if (keys.some((key) => key === 'scaleX' || key === 'scaleY')) {\n return 'resize';\n }\n\n return null;\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.extensions.get('history') as HistoryManager | undefined;\n }\n\n private getSerializationManager(): SerializationManager | undefined {\n return this.extensions.get('serialization') as SerializationManager | undefined;\n }\n\n private getActionsContext() {\n return {\n registry: this.registry,\n getHistoryManager: () => this.getHistoryManager(),\n getSerializationManager: () => this.getSerializationManager(),\n addElement: (element: BaseElement<BaseOptions>) => this.addElement(element),\n removeElement: (id: string) => this.removeElement(id),\n updateElement: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) =>\n this.updateElement(element, next),\n getUpdateKind: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) =>\n this.getUpdateKind(element, next),\n };\n }\n\n add(element: BaseElement<BaseOptions>): Promise<void> {\n return addWithHistory(this.getActionsContext(), element);\n }\n\n remove(id: string): Promise<void> {\n return removeWithHistory(this.getActionsContext(), id);\n }\n\n update(id: string, next: Partial<BaseOptions>): Promise<void> {\n return updateWithHistory(this.getActionsContext(), id, next);\n }\n\n clear(): void {\n clearElements(this.registry, (id) => this.removeElement(id));\n }\n\n get(id: string, raw?: false): SerializedElement | undefined;\n get(id: string, raw: true): BaseElement<BaseOptions> | undefined;\n get(id: string, raw = false): unknown {\n if (raw) {\n return this.registry.get(id);\n }\n\n return getElementSnapshot(this.registry, () => this.getSerializationManager(), id);\n }\n\n getExtension<T>(name: string): T | undefined {\n return this.extensions.get(name) as T | undefined;\n }\n\n on<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): this {\n this.events.on(event, listener);\n return this;\n }\n\n off<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): this {\n this.events.off(event, listener);\n return this;\n }\n\n destroy(): void {\n this.destroyed = true;\n for (const ext of this.extensions.values()) {\n (ext as { destroy?: () => void } | undefined)?.destroy?.();\n }\n this.extensions.clear();\n this.registry.clear();\n this.app.destroy();\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementFactory } from '@/core/ElementRegistry';\nimport type { CircleOptions } from '@/elements/Shape/Circle/CircleOptions';\nimport type { LineOptions } from '@/elements/Shape/Line/LineOptions';\nimport type { RectangleOptions } from '@/elements/Shape/Rectangle/RectangleOptions';\nimport {\n CircleShape,\n createShape,\n getShapeFactories,\n LineShape,\n RectangleShape,\n registerShapeFactory,\n StarShape,\n} from '@/elements/Shape/registry';\nimport type { StarOptions } from '@/elements/Shape/Star/StarOptions';\n\nconst Rectangle = 'shape:rectangle' as const;\nconst Circle = 'shape:circle' as const;\nconst Star = 'shape:star' as const;\nconst Line = 'shape:line' as const;\n\nfunction create(type: typeof Rectangle, options: RectangleOptions): RectangleShape;\nfunction create(type: typeof Circle, options: CircleOptions): CircleShape;\nfunction create(type: typeof Star, options: StarOptions): StarShape;\nfunction create(type: typeof Line, options: LineOptions): LineShape;\nfunction create(type: string, options: BaseOptions): BaseElement<BaseOptions> {\n return createShape({ ...options, type });\n}\n\nfunction register(type: string, factory: ElementFactory): void {\n registerShapeFactory(type, factory);\n}\n\nexport const Shape = {\n Rectangle,\n Circle,\n Star,\n Line,\n create,\n register,\n get factories(): ReadonlyMap<string, ElementFactory> {\n return getShapeFactories();\n },\n} as const;\n\nexport type { CircleOptions, LineOptions, RectangleOptions, StarOptions };\nexport {\n CircleShape,\n getShapeFactories,\n LineShape,\n RectangleShape,\n registerShapeFactory,\n StarShape,\n};\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { TEXT_FACTORIES } from '@/elements/Text/registry';\nimport { TextElement } from '@/elements/Text/TextElement';\nimport type {\n MeshEffectFunction,\n RegisterMeshEffectOptions,\n TextOptions,\n} from '@/elements/Text/types';\nimport { clearVectorTemplateCache } from '@/elements/Text/Vector/builder';\nimport {\n getMeshEffect,\n listMeshEffects,\n registerMeshEffect,\n} from '@/elements/Text/Vector/registry';\n\nexport namespace Text {\n export const Type = 'text' as const;\n\n export function create(options: TextOptions): TextElement;\n export function create(type: string, options: BaseOptions): BaseElement<BaseOptions>;\n export function create(\n typeOrOptions: string | TextOptions,\n maybeOptions?: BaseOptions,\n ): BaseElement<BaseOptions> {\n const type = typeof typeOrOptions === 'string' ? typeOrOptions : Type;\n const options = typeof typeOrOptions === 'string' ? maybeOptions : typeOrOptions;\n const factory = TEXT_FACTORIES[type];\n\n if (!factory || !options) {\n throw new Error(`Unknown text type: \"${type}\"`);\n }\n\n return factory(options);\n }\n\n export function registerEffect(\n name: string,\n fn: MeshEffectFunction,\n options?: RegisterMeshEffectOptions,\n ): void {\n registerMeshEffect(name, fn, options);\n }\n\n export const getEffect = getMeshEffect;\n export const listEffects = listMeshEffects;\n export const clearEffectCache = clearVectorTemplateCache;\n export const factories = TEXT_FACTORIES;\n}\n\nexport type {\n BaseTextOptions,\n MeshEffectColumn,\n MeshEffectEntry,\n MeshEffectFnContext,\n MeshEffectFunction,\n RegisterMeshEffectOptions,\n TextAlign,\n TextEffect,\n TextEffectOptions,\n TextOptions,\n TextStrokeAlign,\n TextStyleOptions,\n VectorTextRenderOptions,\n VectorTextState,\n} from '@/elements/Text/types';\nexport { TextElement };\n"],"names":["PixiApplication","create","Typr","_b","_a","signedArea","area","intersects","Text","bounds","leadingInset","DEFAULTS","Rectangle","getSelectedOptions","h","command","EventEmitter"],"mappings":"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","x_google_ignoreList":[15,17,107]}