From 43b659b64bf49f2dac5a107e8b90100cf5b81b0b Mon Sep 17 00:00:00 2001 From: 33333-33333 Date: Wed, 3 Jun 2026 03:13:14 +0900 Subject: [PATCH] default paintings --- DEFAULT_ART_AUDIT.md | 36 + DEFAULT_ART_EXPANSION.md | 35 + PIXEL_ART_QUALITY.md | 69 + README.md | 25 + app.js | 1286 ++++++++++++++++- assets.json | 2815 ++++++++++++++++++++++++++++++++++++++ default_assets_sheet.png | Bin 0 -> 131468 bytes extract_assets.js | 24 + 8 files changed, 4244 insertions(+), 46 deletions(-) create mode 100644 DEFAULT_ART_AUDIT.md create mode 100644 DEFAULT_ART_EXPANSION.md create mode 100644 PIXEL_ART_QUALITY.md create mode 100644 assets.json create mode 100644 default_assets_sheet.png create mode 100644 extract_assets.js diff --git a/DEFAULT_ART_AUDIT.md b/DEFAULT_ART_AUDIT.md new file mode 100644 index 0000000..762a0d5 --- /dev/null +++ b/DEFAULT_ART_AUDIT.md @@ -0,0 +1,36 @@ +# Default Art Audit + +## 実施内容 + +`app.js` の `buildDefaultGalleryPack()` を確認し、初期同梱作品の品質を監査した。低品質または初期作品として弱いものは、削除対象リストで除外する方式にした。既存ローカル状態に残っている Island Team 製の該当作品も、次回ロード時に Collection / island placement / dynamic summon から除外される。 + +## 削除した初期作品 + +| 作品名 | 理由 | +|---|---| +| Shell Rock | 16×16に対して実質的な形状が小さく、島上で石・貝の識別点が弱い。 | +| Azure Minnow | 魚としての頭・尾・ヒレが弱く、単なる水色の塊に近い。 | +| Firefly Swirl | 8×8で透明部が多く、作品というより粒子エフェクトに近い。 | +| Leaf Sparrow | 鳥のシルエットが薄く、頭・翼・尾の分離が不足している。 | +| Silver Trout | 魚としては読めるが、既存の Cloud Koi / Sunset Koi より低密度で初期作品として弱い。 | +| Butterfly Fish | 小型魚としての情報量が少なく、島上で主題が読み取りにくい。 | + +## 残したが改変候補に入る作品 + +| 作品名 | コメント | +|---|---| +| River Stones | 8×8としては成立しているが、石の影と水際の情報を足すと良い。 | +| Paper Crane | モチーフは明確だが、分断セルが多い。羽根の接続を調整できる。 | +| Linen Cottage | 読みやすいが、屋根と壁の面が単純。影と窓を増やせる。 | +| Human 系小型作品 | 役割差はあるが、体型・顔・道具の差分が弱いものがある。 | + +## コード上の変更点 + +- `REMOVED_LOW_QUALITY_SEED_ASSET_NAMES` を追加。 +- `buildDefaultGalleryPack()` の戻り値に品質フィルタを適用。 +- `mergeDefaultGallery()` で既存ローカル状態の Island Team 製削除対象も除外。 +- Python 側テストは `14 passed`。 + +## 次の作業 + +ユーザー確認後、新しいデフォルト作品を追加する。追加時は `PIXEL_ART_QUALITY.md` の基準に従い、既存の弱いカテゴリを補う。 diff --git a/DEFAULT_ART_EXPANSION.md b/DEFAULT_ART_EXPANSION.md new file mode 100644 index 0000000..f0724c6 --- /dev/null +++ b/DEFAULT_ART_EXPANSION.md @@ -0,0 +1,35 @@ +# Default Art Expansion / Depth Lighting Tuning + +## Depth tuning + +Adjusted the depth-local light response so that: + +- local light influence stays colorized instead of washing into a neutral gray band, +- the light source itself and nearby sprite/depth corners catch the strongest highlight, +- brightness depends less on raw source-to-pixel distance than before, +- convex edges still read clearly under nearby inspection/night lights. + +Implementation areas: `depthLocalLightResponse()`, `getDepthEdgeLightBoost()`, and local-light color mixing inside `shadeAssetPixelColor()` in `app.js`. + +## UI bubble correction + +- Reduced the selection bubble top offset so the bubble appears closer to the selected sprite. + +## New large default works + +### Static / building +- Smile Portrait — 24x32 +- Rosetta Stela — 24x32 +- Pharaoh Mask — 24x32 +- Terracotta Sentinel — 20x32 + +### Static / nature +- Great Wave Panel — 32x24 +- Sunflower Still Life — 24x32 +- Stone Circle — 32x24 + +## Notes + +- `assets.json` and `default_assets_sheet.png` were refreshed. +- The seeded island placement list was expanded so these works appear by default. +- Save schema was bumped to `25`. diff --git a/PIXEL_ART_QUALITY.md b/PIXEL_ART_QUALITY.md new file mode 100644 index 0000000..578a256 --- /dev/null +++ b/PIXEL_ART_QUALITY.md @@ -0,0 +1,69 @@ +# ドット絵品質基準 / Pixel Art Quality Standard + +このプロトタイプで「良質なドット絵」と見なす基準。共有サービスの初期作品、審査、改変、削除判断で使う。 + +## 1. 最低条件 + +- **透明セルを作品の一部として設計している**:余白はただの空きではなく、シルエットを読ませるために残す。 +- **1秒以内に主題が判別できる**:縮小表示、島上表示、夜間表示でも「家」「鳥」「魚」「橋」などの役割が読める。 +- **接地・重心が明確**:静物は地面や水面に乗って見える。動物・人は足元または接地点が曖昧でない。 +- **パレットに収まる**:任意色の多用ではなく、既存パレットコードに近い色で統一する。 +- **クリック対象として破綻しない**:極端に薄い線、孤立点だけの作品、透明部分が多すぎる作品は避ける。 + +## 2. 具体的な評価軸 + +| 評価軸 | 良い状態 | 低品質と判断する状態 | +|---|---|---| +| シルエット | 背景なしでも輪郭だけで主題が読める | 点・棒・塊にしか見えない | +| 明暗 | 上面・側面・影の方向がある | 全面が同じ明度で平坦 | +| 色数 | 小物は3〜6色、中型は5〜10色程度で役割が分かれる | 1〜2色だけ、または無秩序に多色 | +| ピクセル密度 | 余白、密部、抜きのバランスがある | ほぼ空白、またはベタ塗りの矩形 | +| エッジ | 角、段差、斜線に意図がある | ガタつきが偶然に見える | +| 内部ディテール | 目、窓、葉、波、道具など識別点がある | 主題を補強する点がない | +| 島との親和性 | 地形、昼夜、他作品のサイズ感と合う | 尺度が浮く、接地しない、光源が不自然 | +| メタ情報 | building の door、light、depth、particle が主題に沿う | メタ情報がない、または見た目と矛盾する | + +## 3. サイズ別の合格目安 + +### 8×8 + +- 主題は1つに絞る。 +- 色は3〜5色までを目安にする。 +- 透明を含めても、主題の有効ピクセルは概ね16セル以上ほしい。 +- 「点の集合」ではなく、頭・胴・尾、花・葉・茎などの構造を最低2部位に分ける。 + +### 12×12〜16×16 + +- デフォルト作品の中心サイズ。 +- 輪郭色、主色、中間色、ハイライト、影の5層を基本にする。 +- 動物・人は顔または進行方向が読めること。 +- 建物・自然物は接地線、屋根/幹/水面などの基礎形を入れる。 + +### 20×20以上 + +- 大型作品はディテール量だけでなく、遠目の大形状を優先する。 +- 3〜5個の大きな面に分け、その中に小ディテールを置く。 +- 光・depth・particle を使う場合、効果が主題を補強していること。 + +## 4. 削除・改変の判断 + +### 削除候補 + +- 何を描いたか判別できない。 +- 既存の高品質作品と役割が重複し、見劣りする。 +- ほぼ点、線、単色塊で、改変より作り直しが早い。 +- 島上でクリックや配置の視認性を落とす。 + +### 改変候補 + +- 主題は読めるが、明暗・輪郭・接地が弱い。 +- 色の階調が足りない。 +- サイズに対してディテールが不足している。 +- 良いアイデアはあるが、他作品群と密度が合っていない。 + +## 5. デフォルト作品としての追加基準 + +- 初回表示でサービスの品質水準を示せること。 +- ユーザーがリミックスしたくなる明確なモチーフを持つこと。 +- 小型、中型、大型、静物、動物、人、船、水辺、建物が偏りすぎないこと。 +- 低品質作品を大量に残して作品数を稼がないこと。 diff --git a/README.md b/README.md index f9f7224..5bd66ef 100644 --- a/README.md +++ b/README.md @@ -298,3 +298,28 @@ Use this to compare minified JSON, gzip, zlib, and Brotli when available. Produc - Added server-side `world.phase` and `dynamic.move` event helpers/tests. Shared clients should treat these events as the source of truth for day/night and autonomous dynamic positions. - Pending shared object moves now render as temporary local interpolation only; the persistent world state is updated only by server-issued events. - Depth shading can now use a cursor-local light source on rendered sprites at night. + +## Custom update 3: colored local light fix + heritage/masterpiece gallery + +- Save schema is now `25`. +- Fixed the local depth-light wash so the affected area no longer collapses into a mostly gray band; local lights now preserve more of the source color. +- Reworked depth local-light behavior so the source itself and nearby outer/depth corners catch the strongest highlights, while distance has a weaker effect on brightness than before. +- Reduced the selection bubble offset so the bubble sits noticeably closer to the top of the selected artwork. +- Added several new large default works themed around masterpieces, heritage, and artifacts: **Smile Portrait**, **Great Wave Panel**, **Sunflower Still Life**, **Rosetta Stela**, **Pharaoh Mask**, **Stone Circle**, **Terracotta Sentinel**. +- Refreshed `assets.json` and `default_assets_sheet.png` after the additions. + +## Custom update 4: cursor-light smoothing + gray-bloom hotfix + +- Save schema is now `26`. +- Fixed the urgent regression where a single local light could wash large parts of a sprite into a gray, low-chroma bloom. +- Reduced local-light body fill on depth sprites so highlights stay concentrated on lit edges / corners instead of flattening the whole silhouette. +- Smoothed cursor-light falloff so in-range / out-of-range transitions are less abrupt. +- Removed the always-on center fallback for the cursor inspection light and softened the visible cursor halo, which eliminates the unwanted blue circular artifact when no pointer light should be shown. + +## Custom update 5: asset-light gray fix + temporary global delete + more default works + +- Save schema is now `27`. +- Adjusted **asset-mounted local lights** again so they no longer wash large depth sprites into a gray body fill; their effect is concentrated much more strongly on lit edges and corners. +- Fixed the analog clock hand offset (it had been visually about 5 degrees early). +- Added a **temporary** delete override so **all collection works can be deleted** regardless of owner. This is clearly marked in `app.js` with comments and can be reverted by setting `TEMP_ALLOW_DELETE_ALL_WORKS = false`. +- Added many more default works: **Rain Bell Tower**, **Crimson Pagoda**, **Meteor Forge**, **Ink Garden Screen**, **Meadow Totem**, **Twilight Caravan**, **Pepper Fox**, **Glass Manta**, **Festival Drummer**, **Bloom Sprite**. diff --git a/app.js b/app.js index 9859b1d..af460ca 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,7 @@ const STORAGE_KEY = 'pixel-island-summoner:phase6b'; const LEGACY_STORAGE_KEYS = ['pixel-island-summoner:phase6a']; - const SAVE_SCHEMA = 23; + const SAVE_SCHEMA = 27; const WORLD_W = 144; const WORLD_H = 112; const TILE_W = 32; @@ -23,6 +23,10 @@ const MAX_DYNAMIC_STEPS_PER_FRAME = 3; const MAX_SPRITE_CACHE_ENTRIES = 260; const DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER = 5; + // TEMPORARY MODERATION / ADMIN EASEMENT: + // While this flag is true, every collection work can be deleted regardless of owner. + // Set back to false to restore the original owner-only deletion rule in shared worlds. + const TEMP_ALLOW_DELETE_ALL_WORKS = true; const COLOR_CODES = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; const PALETTE = buildPalette(); @@ -36,6 +40,14 @@ const EDITOR_HISTORY_LIMIT = 80; const MAX_EDITOR_DIMENSION = 64; const PHASE5_GUARDRAILS = { maxAssets: 220, maxWorldObjects: 1000, maxReports: 200, defaultDisplayLimit: 250, newArrivalSlots: 150, revivalSlots: 100, publishLimitFirstDay: 5, publishLimitTrusted: 10, upvoteDelaySlots: 20, downvoteAdvanceSlots: 25, upvoteRankCap: 50, maxParticles: 200, particleMinZoom: 0.72 }; + const REMOVED_LOW_QUALITY_SEED_ASSET_NAMES = new Set([ + 'Shell Rock', + 'Azure Minnow', + 'Firefly Swirl', + 'Leaf Sparrow', + 'Silver Trout', + 'Butterfly Fish' + ]); const editorActions = () => MODULES.EditorActions || null; @@ -1137,6 +1149,9 @@ } function canCurrentAccountDeleteAsset(asset, showToast = true) { + // Temporary measure: allow deleting any work so the collection can be cleaned up quickly. + // Revert by setting TEMP_ALLOW_DELETE_ALL_WORKS back to false above. + if (TEMP_ALLOW_DELETE_ALL_WORKS) return true; if (!isSharedWorld()) return true; const actor = currentAccountId(); if (!actor) { @@ -3453,10 +3468,11 @@ }) : null; const del = makeButton('Delete', (event) => { event?.stopPropagation?.(); deleteAsset(asset); }); del.classList.add('danger'); + const canDeleteAny = TEMP_ALLOW_DELETE_ALL_WORKS || isMine; actions.append(up, down, hide, remix); if (edit) actions.append(edit); if (move) actions.append(move); - if (isMine) actions.append(del); + if (canDeleteAny) actions.append(del); meta.append(actions); } else { const mini = document.createElement('span'); @@ -4015,7 +4031,7 @@ function updateClock() { const phase = getPhase(); const progress = phase.progress || 0; - const degrees = progress * 360 - 5; + const degrees = progress * 360; if (els.analogClockHand) els.analogClockHand.style.transform = `translate(-50%, -100%) rotate(${degrees.toFixed(2)}deg)`; if (els.analogClock) { els.analogClock.style.setProperty('--clock-rotate', `${degrees.toFixed(2)}deg`); @@ -4349,18 +4365,19 @@ function drawNightCursorGlow(time, phase) { - if (!areNightLightsActive(phase)) return; + if (!areNightLightsActive(phase) || !cursorScreen.active) return; const cursorPoint = getCursorLightScreenPoint(phase); if (!cursorPoint) return; const sx = cursorPoint.x; const sy = cursorPoint.y; - const pulse = 0.86 + Math.sin(time / 420) * 0.14; - const radius = Math.max(52, 86 * view.zoom) * pulse; + const pulse = 0.9 + Math.sin(time / 420) * 0.1; + const radius = Math.max(28, 54 * view.zoom) * pulse; ctx.save(); ctx.globalCompositeOperation = 'lighter'; const glow = ctx.createRadialGradient(sx, sy, 0, sx, sy, radius); - glow.addColorStop(0, 'rgba(142, 218, 255, .30)'); - glow.addColorStop(0.32, 'rgba(142, 218, 255, .13)'); + glow.addColorStop(0, 'rgba(198, 236, 255, .16)'); + glow.addColorStop(0.22, 'rgba(170, 225, 255, .09)'); + glow.addColorStop(0.6, 'rgba(142, 218, 255, .035)'); glow.addColorStop(1, 'rgba(142, 218, 255, 0)'); ctx.fillStyle = glow; ctx.beginPath(); @@ -4538,15 +4555,12 @@ function getCursorLightScreenPoint(phase) { if (cursorScreen.active) return { x: cursorScreen.x, y: cursorScreen.y }; - if (areNightLightsActive(phase)) return { x: cw / 2, y: ch / 2 }; return null; } function getLocalSpriteLights(info, phase) { if (visualSettings().enableLights === false || !info?.asset) return []; const lights = areNightLightsActive(phase) ? getAssetLightPointsForSide(info.asset, info.side) : []; - // The cursor is a local inspection light. It must affect depth shading when active, - // and at night it should also follow the blue-white center glow even before the mouse moves. const cursorPoint = getCursorLightScreenPoint(phase); if (cursorPoint) { const worldX = (cursorPoint.x - view.x) / view.zoom; @@ -4555,9 +4569,16 @@ const scale = info.asset.category === 'static' ? STATIC_SCALE : DYNAMIC_SCALE; const lx = local.x / scale - .5; const ly = local.y / scale - .5; - const reach = Math.max(3.5, Math.max(assetWidth(info.asset), assetHeight(info.asset)) * .72); - if (lx >= -reach && ly >= -reach && lx <= assetWidth(info.asset) + reach && ly <= assetHeight(info.asset) + reach) { - lights.push({ x: lx, y: ly, c: '#8edaff', cursor: true, intensity: 1.35 }); + const w = assetWidth(info.asset); + const h = assetHeight(info.asset); + const reach = Math.max(4.5, Math.max(w, h) * 0.86); + const margin = reach * 1.35; + const nearestX = clamp(lx, 0, Math.max(0, w - 1)); + const nearestY = clamp(ly, 0, Math.max(0, h - 1)); + const distToBounds = Math.hypot(lx - nearestX, ly - nearestY); + const spriteProximity = Math.pow(clamp(1 - distToBounds / Math.max(1, margin), 0, 1), 1.85); + if (spriteProximity > 0.01) { + lights.push({ x: lx, y: ly, c: '#d6ecff', cursor: true, intensity: 0.3 + spriteProximity * 0.82 }); } } return lights; @@ -4622,7 +4643,9 @@ const scale = asset.category === 'static' ? STATIC_SCALE : DYNAMIC_SCALE; const sprite = info.sprite; const sources = []; + const selfOwnerId = item.source?.id || asset.id; for (const source of lightSources) { + if (source.ownerId && source.ownerId === selfOwnerId) continue; const local = spriteLocalPoint(info, source.x, source.y); const dx = local.x - sprite.width / 2; const dy = local.y - sprite.height / 2; @@ -5029,13 +5052,13 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { const item = getSelectedDrawableItem(time); if (item) { const info = getSpriteDrawInfo(item, time, false); - const topPad = Math.max(14, Math.min(28, info.sprite.height * 0.18)); + const topPad = Math.max(6, Math.min(14, info.sprite.height * 0.1)); const baseY = info.pos.y + info.anchorY - info.sprite.height; return { x: info.drawX + info.sprite.width / 2, y: baseY - topPad, asset: item.asset, objectId: item.source?.id || selectedObject.id }; } const cached = lastRenderedSpriteInfo.get(selectedObject.id); if (!cached) return null; - const topPad = Math.max(14, Math.min(28, cached.sprite.height * 0.18)); + const topPad = Math.max(6, Math.min(14, cached.sprite.height * 0.1)); const baseY = cached.pos && Number.isFinite(cached.anchorY) ? cached.pos.y + cached.anchorY - cached.sprite.height : cached.drawY; return { x: cached.drawX + cached.sprite.width / 2, y: baseY - topPad, asset: cached.asset, objectId: selectedObject.id }; } @@ -5324,11 +5347,12 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { const auraRadius = radius * 1.12; if (sx < -auraRadius || sy < -auraRadius || sx > cw + auraRadius || sy > ch + auraRadius) continue; - // Light cores are drawn after the night overlay and do not inherit night darkness. - ctx.globalCompositeOperation = 'source-over'; + // Light cores are additive so they brighten art like the cursor glow instead of + // laying a flat translucent disk over the sprite. + ctx.globalCompositeOperation = 'lighter'; const core = ctx.createRadialGradient(sx, sy, 0, sx, sy, Math.max(3, radius * 0.48)); - core.addColorStop(0, hexToRgba(source.color, .48 * intensity)); - core.addColorStop(.34, hexToRgba(source.color, .22 * intensity)); + core.addColorStop(0, hexToRgba(source.color, .36 * intensity)); + core.addColorStop(.28, hexToRgba(source.color, .18 * intensity)); core.addColorStop(1, hexToRgba(source.color, .00)); ctx.fillStyle = core; ctx.beginPath(); @@ -5721,7 +5745,7 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { if (expanded && Array.isArray(expanded.assets)) { const loadedSchema = Number(expanded.schema || 0); // v16 reset local art because the palette code mapping and seed artwork were intentionally rebuilt. - // v17 expanded the default gallery. v18 added more nature-themed defaults. v19 added giant showcase objects. v20 added more animals, fish, and birds. v21 added human and artificial-object defaults. v22 widened small-sprite hitboxes and fixed night cursor depth light. v23 strengthens multi-light depth response and upgrades lower-quality seed art while preserving v16+ user state. + // v17 expanded the default gallery. v18 added more nature-themed defaults. v19 added giant showcase objects. v20 added more animals, fish, and birds. v21 added human and artificial-object defaults. v22 widened small-sprite hitboxes and fixed night cursor depth light. v23 strengthens multi-light depth response and upgrades lower-quality seed art while preserving v16+ user state. v24 sharpens near-light depth reflection falloff and expands the outlined default gallery. v25 fixes gray local-light wash, brings the selection bubble closer to sprite tops, and adds large heritage/masterpiece default works. v26 removes the single-light gray bloom regression, smooths cursor-light falloff, and removes the unwanted blue cursor halo artifact. v27 reduces gray bloom from asset-mounted lights, fixes the clock-hand offset, temporarily enables delete-for-all works, and expands the default gallery again. if (loadedSchema < 16) return seedState(); return mergeDefaultGallery(normalizeState(expanded)); } @@ -6178,10 +6202,150 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { lightPixels: [{ x: 13, y: 12 }, { x: 14, y: 12 }, { x: 12, y: 13 }, { x: 15, y: 13 }], lightColor: '#ffe99a', door: { x: 14, y: 24 } + }), + makeAssetSized('Moon Jelly Aquarium', 'static', 'building', drawMoonJellyAquarium(), 24, 28, { + depthPixels: drawMoonJellyAquariumDepth(), + lightPixels: [{ x: 11, y: 0 }, { x: 12, y: 0 }, { x: 10, y: 10 }, { x: 13, y: 10 }, { x: 11, y: 20 }, { x: 12, y: 20 }], + lightColor: '#ffe7a6', + door: { x: 11, y: 24 } + }), + makeAssetSized('Aurora Observatory', 'static', 'building', drawAuroraObservatory(), 28, 28, { + depthPixels: filledDepthFromPixelsSized(drawAuroraObservatory(), 28, 28), + lightPixels: [{ x: 13, y: 2 }, { x: 14, y: 2 }, { x: 9, y: 13 }, { x: 18, y: 13 }, { x: 13, y: 23 }], + lightColor: '#d9eeff', + door: { x: 13, y: 24 } + }), + makeAssetSized('Hearthwind Mill', 'static', 'building', drawHearthwindMill(), 24, 28, { + depthPixels: filledDepthFromPixelsSized(drawHearthwindMill(), 24, 28), + lightPixels: [{ x: 8, y: 13 }, { x: 15, y: 13 }, { x: 11, y: 18 }], + lightColor: '#ffe6a5', + door: { x: 11, y: 22 } + }), + makeAssetSized('Tideglass Lighthouse', 'static', 'building', drawTideglassLighthouse(), 20, 36, { + depthPixels: filledDepthFromPixelsSized(drawTideglassLighthouse(), 20, 36), + lightPixels: [{ x: 8, y: 2 }, { x: 9, y: 2 }, { x: 8, y: 16 }, { x: 8, y: 24 }], + lightColor: '#f8f0bb', + door: { x: 8, y: 33 } + }), + makeAssetSized('Mossrail Depot', 'static', 'building', drawMossrailDepot(), 32, 20, { + depthPixels: filledDepthFromPixelsSized(drawMossrailDepot(), 32, 20), + lightPixels: [{ x: 6, y: 8 }, { x: 13, y: 8 }, { x: 20, y: 8 }, { x: 26, y: 8 }], + lightColor: '#ffe1a0', + door: { x: 15, y: 16 } + }), + makeAssetSized('Lantern Library', 'static', 'building', drawLanternLibrary(), 28, 24, { + depthPixels: filledDepthFromPixelsSized(drawLanternLibrary(), 28, 24), + lightPixels: [{ x: 8, y: 7 }, { x: 19, y: 7 }, { x: 13, y: 16 }, { x: 14, y: 16 }], + lightColor: '#ffe8b0', + door: { x: 13, y: 18 } + }), + makeAssetSized('Velvet Theater', 'static', 'building', drawVelvetTheater(), 28, 20, { + depthPixels: filledDepthFromPixelsSized(drawVelvetTheater(), 28, 20), + lightPixels: [{ x: 5, y: 1 }, { x: 9, y: 1 }, { x: 13, y: 1 }, { x: 17, y: 1 }, { x: 21, y: 1 }, { x: 13, y: 14 }], + lightColor: '#ffd19a', + door: { x: 13, y: 16 } + }), + makeAssetSized('Bloom Bridge Gate', 'static', 'nature', drawBloomBridgeGate(), 24, 24, { + depthPixels: filledDepthFromPixelsSized(drawBloomBridgeGate(), 24, 24), + particlePixels: [{ x: 7, y: 2, c: nearestPaletteCode('#ffd4ea'), dir: 'up' }, { x: 16, y: 2, c: nearestPaletteCode('#ffd4ea'), dir: 'up' }] + }), + makeAssetSized('Starreef Submarine', 'static', 'ship', drawStarreefSubmarine(), 32, 16, { + depthPixels: filledDepthFromPixelsSized(drawStarreefSubmarine(), 32, 16), + lightPixels: [{ x: 12, y: 3 }, { x: 15, y: 7 }, { x: 20, y: 7 }], + lightColor: '#c5f1ff' + }), + makeAssetSized('Astrolabe Courier', 'dynamic', 'human', drawAstrolabeCourierRight(), 12, 16, { + depthPixels: filledDepthFromPixelsSized(drawAstrolabeCourierRight(), 12, 16), + lightPixels: [{ x: 6, y: 5 }], + lightColor: '#d9eeff' + }), + makeAssetSized('Puddle Toad', 'dynamic', 'animal', drawPuddleToadRight(), 12, 10, { + depthPixels: filledDepthFromPixelsSized(drawPuddleToadRight(), 12, 10) + }), + makeAssetSized('Ribbon Swan', 'dynamic', 'bird', drawRibbonSwanRight(), 12, 12, { + depthPixels: filledDepthFromPixelsSized(drawRibbonSwanRight(), 12, 12) + }), + makeAssetSized('Lantern Beetle', 'dynamic', 'animal', drawLanternBeetleRight(), 12, 12, { + depthPixels: filledDepthFromPixelsSized(drawLanternBeetleRight(), 12, 12), + lightPixels: [{ x: 5, y: 3 }], + lightColor: '#fff1a8' + }), + makeAssetSized('Smile Portrait', 'static', 'building', drawSmilePortrait(), 24, 32, { + depthPixels: filledDepthFromPixelsSized(drawSmilePortrait(), 24, 32) + }), + makeAssetSized('Great Wave Panel', 'static', 'nature', drawGreatWavePanel(), 32, 24, { + depthPixels: filledDepthFromPixelsSized(drawGreatWavePanel(), 32, 24) + }), + makeAssetSized('Sunflower Still Life', 'static', 'nature', drawSunflowerStillLife(), 24, 32, { + depthPixels: filledDepthFromPixelsSized(drawSunflowerStillLife(), 24, 32) + }), + makeAssetSized('Rosetta Stela', 'static', 'building', drawRosettaStela(), 24, 32, { + depthPixels: filledDepthFromPixelsSized(drawRosettaStela(), 24, 32) + }), + makeAssetSized('Pharaoh Mask', 'static', 'building', drawPharaohMask(), 24, 32, { + depthPixels: filledDepthFromPixelsSized(drawPharaohMask(), 24, 32) + }), + makeAssetSized('Stone Circle', 'static', 'nature', drawStoneCircle(), 32, 24, { + depthPixels: filledDepthFromPixelsSized(drawStoneCircle(), 32, 24) + }), + makeAssetSized('Terracotta Sentinel', 'static', 'building', drawTerracottaSentinel(), 20, 32, { + depthPixels: filledDepthFromPixelsSized(drawTerracottaSentinel(), 20, 32) + }), + makeAssetSized('Rain Bell Tower', 'static', 'building', drawRainBellTower(), 20, 36, { + depthPixels: filledDepthFromPixelsSized(drawRainBellTower(), 20, 36), + lightPixels: [{ x: 9, y: 11 }, { x: 9, y: 19 }], + lightColor: '#fff0b8', + door: { x: 9, y: 33 } + }), + makeAssetSized('Crimson Pagoda', 'static', 'building', drawCrimsonPagoda(), 24, 32, { + depthPixels: filledDepthFromPixelsSized(drawCrimsonPagoda(), 24, 32), + lightPixels: [{ x: 8, y: 12 }, { x: 15, y: 12 }, { x: 11, y: 22 }], + lightColor: '#ffd38a', + door: { x: 11, y: 28 } + }), + makeAssetSized('Meteor Forge', 'static', 'building', drawMeteorForge(), 32, 24, { + depthPixels: filledDepthFromPixelsSized(drawMeteorForge(), 32, 24), + lightPixels: [{ x: 8, y: 10 }, { x: 23, y: 10 }, { x: 15, y: 16 }], + lightColor: '#ffb36b', + door: { x: 15, y: 19 } + }), + makeAssetSized('Ink Garden Screen', 'static', 'nature', drawInkGardenScreen(), 32, 24, { + depthPixels: filledDepthFromPixelsSized(drawInkGardenScreen(), 32, 24) + }), + makeAssetSized('Meadow Totem', 'static', 'nature', drawMeadowTotem(), 20, 28, { + depthPixels: filledDepthFromPixelsSized(drawMeadowTotem(), 20, 28) + }), + makeAssetSized('Twilight Caravan', 'static', 'ship', drawTwilightCaravan(), 32, 16, { + depthPixels: filledDepthFromPixelsSized(drawTwilightCaravan(), 32, 16), + lightPixels: [{ x: 9, y: 7 }, { x: 15, y: 7 }, { x: 22, y: 7 }], + lightColor: '#ffdba0' + }), + makeAssetSized('Pepper Fox', 'dynamic', 'animal', drawPepperFoxRight(), 16, 16, { + depthPixels: filledDepthFromPixelsSized(drawPepperFoxRight(), 16, 16) + }), + makeAssetSized('Glass Manta', 'dynamic', 'fish', drawGlassMantaRight(), 16, 12, { + depthPixels: filledDepthFromPixelsSized(drawGlassMantaRight(), 16, 12), + lightPixels: [{ x: 7, y: 5 }], + lightColor: '#9ef4ff' + }), + makeAssetSized('Festival Drummer', 'dynamic', 'human', drawFestivalDrummerRight(), 14, 16, { + depthPixels: filledDepthFromPixelsSized(drawFestivalDrummerRight(), 14, 16) + }), + makeAssetSized('Bloom Sprite', 'dynamic', 'animal', drawBloomSpriteRight(), 12, 12, { + depthPixels: filledDepthFromPixelsSized(drawBloomSpriteRight(), 12, 12), + lightPixels: [{ x: 5, y: 3 }], + lightColor: '#ffe7a8' }) ]; const idByName = Object.fromEntries(assets.map((a) => [a.name, a.id])); + const removedLowQualitySeedAssetIds = new Set([...REMOVED_LOW_QUALITY_SEED_ASSET_NAMES].map((name) => idByName[name]).filter(Boolean)); + const applySeedQualityFilter = (gallery) => ({ + ...gallery, + assets: gallery.assets.filter((asset) => !removedLowQualitySeedAssetIds.has(asset.id)), + placed: gallery.placed.filter((object) => !removedLowQualitySeedAssetIds.has(object.assetId)), + dynamicSummons: gallery.dynamicSummons.filter((object) => !removedLowQualitySeedAssetIds.has(object.assetId)) + }); const whalePos = findNearestTerrain('water', 62, 58); const koiPos = findNearestTerrain('water', 66, 60); const skiffPos = findNearestTerrain('water', 56, 58); @@ -6190,7 +6354,8 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { const sunsetKoiPos = findNearestTerrain('water', 60, 61); const troutPos = findNearestTerrain('water', 75, 56); const butterflyFishPos = findNearestTerrain('water', 68, 63); - return { + const starreefPos = findNearestTerrain('water', 118, 84); + return applySeedQualityFilter({ assets, placed: [ { id: uid(), assetId: idByName['Crescent Tea House'], ownerAccountId: 'island-team', x: 36, y: 36, placedAt: now, publishedAt: now, version: 1 }, @@ -6223,7 +6388,29 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { { id: uid(), assetId: idByName['Moonfall Cascade'], ownerAccountId: 'island-team', x: 72, y: 35, placedAt: now, publishedAt: now, version: 1 }, { id: uid(), assetId: idByName['Sunblossom Gate'], ownerAccountId: 'island-team', x: 34, y: 47, placedAt: now, publishedAt: now, version: 1 }, { id: uid(), assetId: idByName['Echo Cavern'], ownerAccountId: 'island-team', x: 98, y: 42, placedAt: now, publishedAt: now, version: 1 }, - { id: uid(), assetId: idByName['Worldroot Shrine'], ownerAccountId: 'island-team', x: 58, y: 31, placedAt: now, publishedAt: now, version: 1 } + { id: uid(), assetId: idByName['Worldroot Shrine'], ownerAccountId: 'island-team', x: 58, y: 31, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Moon Jelly Aquarium'], ownerAccountId: 'island-team', x: 112, y: 38, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Aurora Observatory'], ownerAccountId: 'island-team', x: 70, y: 26, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Hearthwind Mill'], ownerAccountId: 'island-team', x: 16, y: 56, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Tideglass Lighthouse'], ownerAccountId: 'island-team', x: 122, y: 28, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Mossrail Depot'], ownerAccountId: 'island-team', x: 104, y: 64, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Lantern Library'], ownerAccountId: 'island-team', x: 38, y: 29, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Velvet Theater'], ownerAccountId: 'island-team', x: 86, y: 31, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Bloom Bridge Gate'], ownerAccountId: 'island-team', x: 73, y: 81, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Starreef Submarine'], ownerAccountId: 'island-team', ...starreefPos, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Smile Portrait'], ownerAccountId: 'island-team', x: 13, y: 55, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Great Wave Panel'], ownerAccountId: 'island-team', x: 68, y: 51, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Sunflower Still Life'], ownerAccountId: 'island-team', x: 34, y: 80, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Rosetta Stela'], ownerAccountId: 'island-team', x: 122, y: 74, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Pharaoh Mask'], ownerAccountId: 'island-team', x: 93, y: 27, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Stone Circle'], ownerAccountId: 'island-team', x: 73, y: 87, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Terracotta Sentinel'], ownerAccountId: 'island-team', x: 111, y: 69, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Rain Bell Tower'], ownerAccountId: 'island-team', x: 126, y: 43, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Crimson Pagoda'], ownerAccountId: 'island-team', x: 26, y: 35, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Meteor Forge'], ownerAccountId: 'island-team', x: 47, y: 66, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Ink Garden Screen'], ownerAccountId: 'island-team', x: 86, y: 77, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Meadow Totem'], ownerAccountId: 'island-team', x: 22, y: 76, placedAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Twilight Caravan'], ownerAccountId: 'island-team', x: 18, y: 90, placedAt: now, publishedAt: now, version: 1 } ], dynamicSummons: [ { id: uid(), assetId: idByName['Lantern Cat'], ownerAccountId: 'island-team', homeX: 38, homeY: 39, createdAt: now, publishedAt: now, version: 1 }, @@ -6254,9 +6441,17 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { { id: uid(), assetId: idByName['Tea Robot'], ownerAccountId: 'island-team', homeX: 104, homeY: 59, createdAt: now, publishedAt: now, version: 1 }, { id: uid(), assetId: idByName['Balloon Vendor'], ownerAccountId: 'island-team', homeX: 98, homeY: 58, createdAt: now, publishedAt: now, version: 1 }, { id: uid(), assetId: idByName['Jelly Comet'], ownerAccountId: 'island-team', homeX: 112, homeY: 53, createdAt: now, publishedAt: now, version: 1 }, - { id: uid(), assetId: idByName['Courier Bike'], ownerAccountId: 'island-team', homeX: 88, homeY: 60, createdAt: now, publishedAt: now, version: 1 } + { id: uid(), assetId: idByName['Courier Bike'], ownerAccountId: 'island-team', homeX: 88, homeY: 60, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Astrolabe Courier'], ownerAccountId: 'island-team', homeX: 72, homeY: 28, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Puddle Toad'], ownerAccountId: 'island-team', homeX: 74, homeY: 79, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Ribbon Swan'], ownerAccountId: 'island-team', homeX: 56, homeY: 37, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Lantern Beetle'], ownerAccountId: 'island-team', homeX: 40, homeY: 30, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Pepper Fox'], ownerAccountId: 'island-team', homeX: 28, homeY: 71, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Glass Manta'], ownerAccountId: 'island-team', homeX: 122, homeY: 86, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Festival Drummer'], ownerAccountId: 'island-team', homeX: 52, homeY: 67, createdAt: now, publishedAt: now, version: 1 }, + { id: uid(), assetId: idByName['Bloom Sprite'], ownerAccountId: 'island-team', homeX: 92, homeY: 79, createdAt: now, publishedAt: now, version: 1 } ] - }; + }); } function mergeDefaultGallery(baseState) { @@ -6265,6 +6460,18 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { baseState.assets = Array.isArray(baseState.assets) ? baseState.assets : []; baseState.placed = Array.isArray(baseState.placed) ? baseState.placed : []; baseState.dynamicSummons = Array.isArray(baseState.dynamicSummons) ? baseState.dynamicSummons : []; + const removedExistingSeedAssetIds = new Set(baseState.assets + .filter((asset) => REMOVED_LOW_QUALITY_SEED_ASSET_NAMES.has(asset.name) && (asset.ownerAccountId === 'island-team' || asset.author === 'Island Team')) + .map((asset) => asset.id)); + if (removedExistingSeedAssetIds.size) { + baseState.assets = baseState.assets.filter((asset) => !removedExistingSeedAssetIds.has(asset.id)); + baseState.placed = baseState.placed.filter((object) => !removedExistingSeedAssetIds.has(object.assetId)); + baseState.dynamicSummons = baseState.dynamicSummons.filter((object) => !removedExistingSeedAssetIds.has(object.assetId)); + for (const assetId of removedExistingSeedAssetIds) { + delete baseState.hiddenAssets?.[assetId]; + delete baseState.assetVotes?.[assetId]; + } + } const assetByName = new Map(baseState.assets.map((asset) => [asset.name, asset])); const assetIdByName = new Map(baseState.assets.map((asset) => [asset.name, asset.id])); for (const seededAsset of seeded.assets) { @@ -6942,6 +7149,17 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { return shadeAssetPixelColor(hex, visualSettings().enableLights === false ? 0 : depth, 0, 0, 1, renderPhase); } + function depthLocalLightResponse(distance, reach) { + const normalized = clamp(distance / Math.max(0.0001, reach), 0, 1.75); + // Keep a broad bright plateau so distance is not the main factor, while + // still giving the light source itself a strong flare and a soft tail. + const plateau = 1 - Math.pow(Math.min(normalized, 1), 1.12) * 0.2; + const shoulder = Math.pow(clamp(1 - normalized / 0.92, 0, 1), 1.08); + const hotspot = Math.pow(clamp(1 - normalized / 0.18, 0, 1), 4.1); + const tail = Math.pow(clamp(1 - normalized / 1.55, 0, 1), 2.0) * 0.42; + return clamp(plateau * 0.72 + shoulder * 0.36 + hotspot * 0.92 + tail, 0, 1.76); + } + function shadeAssetPixelColor(hex, depth, x, y, width, phase, pixels = null, depths = null, lights = [], height = width) { const rgb = parseHex(hex); if (!rgb) return hex; @@ -6968,40 +7186,63 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { for (const light of lights) { const lc = parseHex(light.c || '#ffd86a'); if (!lc) continue; + const isAssetLight = !!light.assetLight; const dist = Math.hypot((light.x + 0.5) - (x + 0.5), (light.y + 0.5) - (y + 0.5)); - const reach = Math.max(2.25, size * 0.46); + const reach = isAssetLight ? Math.max(1.85, size * 0.24) : Math.max(2.25, size * 0.46); const t = 1 - clamp(dist / reach, 0, 1); - if (t <= 0) continue; - const sourceIntensity = clamp(Number(light.intensity ?? 1) || 1, 0.25, 1.85); + const sourceHotspot = Math.pow(clamp(1 - dist / Math.max(0.001, reach * 0.24), 0, 1), 2.8); + const assetResponse = clamp(Math.pow(t, 1.45) * 0.52 + sourceHotspot * 1.18, 0, 1.58); + const depthResponse = depth ? (isAssetLight ? assetResponse : depthLocalLightResponse(dist, reach)) : (isAssetLight ? assetResponse : t); + const response = depth ? depthResponse : t; + if (response <= 0) continue; + const sourceIntensity = clamp(Number(light.intensity ?? 1) || 1, 0.18, 1.85); const edge = getDepthLightFacing(depth, x, y, width, pixels, depths, light.x, light.y, height); - const localDepthMultiplier = depth ? DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER : 1.15; - const depthFactor = depth > 0 ? 0.82 + edge * 0.46 : depth < 0 ? 0.56 + edge * 0.24 : 0.34 + edge * 0.08; - const strength = t * t * (6 + Math.abs(depth) * 4) * depthFactor * sourceIntensity * localDepthMultiplier; - const mix = Math.min(depth ? 0.78 : 0.32, (0.08 + t * (depth ? 0.18 : 0.12)) * sourceIntensity * (depth ? 1.85 : 1)); + const depthEdgePresence = isAssetLight + ? (0.18 + Math.pow(Math.max(0, edge), 1.4) * 0.74 + sourceHotspot * 0.7) + : (0.06 + edge * 1.24); + const edgePresence = depth ? depthEdgePresence : 1; + const localDepthMultiplier = depth ? DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER : 1.1; + const strengthBase = depth + ? (isAssetLight ? (sourceHotspot * 0.34 + depthResponse * 0.045) : (0.12 + depthResponse * 0.22)) + : t * t; + const strength = strengthBase * (isAssetLight ? (10.5 + sourceHotspot * 18 + Math.abs(depth) * 1.2) : (4.2 + Math.abs(depth) * 2.6)) * edgePresence * sourceIntensity * localDepthMultiplier; + const mix = Math.min(depth ? (isAssetLight ? 0.055 : 0.48) : (isAssetLight ? 0.06 : 0.24), (0.008 + response * (depth ? (isAssetLight ? 0.012 : 0.075) : (isAssetLight ? 0.028 : 0.10))) * sourceIntensity * (depth ? (isAssetLight ? 0.7 : 1.35) : 1)); r = lerp(r, lc.r + strength, mix); g = lerp(g, lc.g + strength * 0.82, mix * 0.94); - b = lerp(b, lc.b + strength * 0.74, mix * 0.88); + b = lerp(b, lc.b + strength * 0.74, mix * 0.9); - const tintPower = Math.pow(t, 1.35) * sourceIntensity * (depth ? 0.17 * DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER : 0.04) * (0.72 + edge * 0.72); + const colorWash = (depth ? (isAssetLight ? 0.004 : 0.045) : (isAssetLight ? 0.006 : 0.03)) * sourceIntensity * edgePresence * (depth ? (isAssetLight ? sourceHotspot : (0.26 + depthResponse * 0.22)) : t); + r += (lc.r - 152) * colorWash; + g += (lc.g - 152) * colorWash * 0.96; + b += (lc.b - 152) * colorWash * 0.92; + + const tintBase = depth ? (isAssetLight ? sourceHotspot * 0.11 : (0.12 + depthResponse * 0.18)) : Math.pow(t, 1.25); + const tintPower = tintBase * sourceIntensity * (depth ? (isAssetLight ? 0.016 : 0.12) * DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER : (isAssetLight ? 0.012 : 0.03)) * (depth ? edgePresence : 1); localTintR += lc.r * tintPower; localTintG += lc.g * tintPower; localTintB += lc.b * tintPower; localTintWeight += tintPower; - localLift += Math.pow(t, 2.0) * sourceIntensity * (depth ? 7.5 * DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER : 4.5) * (0.65 + edge * 0.75); + const liftBase = depth ? (isAssetLight ? (sourceHotspot * 0.42 + Math.pow(t, 2.2) * 0.035) : (0.12 + depthResponse * 0.16)) : Math.pow(t, 1.9); + localLift += liftBase * sourceIntensity * (depth ? (isAssetLight ? 0.85 : 2.4) * DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER : 3.6) * (depth ? edgePresence : 1); } } + const litBeforeQuantization = { r, g, b }; const quantized = quantizePixelShade(rgb, { r, g, b }, activePhase, depth); r = clamp(quantized.r, 0, 255); g = clamp(quantized.g, 0, 255); b = clamp(quantized.b, 0, 255); if (localTintWeight > 0) { const inv = 1 / localTintWeight; - const tintMix = clamp(localTintWeight / (depth ? 3.2 : 8.0), 0, depth ? 0.64 : 0.18); - const lift = clamp(localLift, 0, depth ? 72 : 14); - r = lerp(clamp(r + lift, 0, 255), localTintR * inv, tintMix); - g = lerp(clamp(g + lift * 0.9, 0, 255), localTintG * inv, tintMix * 0.94); - b = lerp(clamp(b + lift * 0.82, 0, 255), localTintB * inv, tintMix * 0.9); + const tintMix = clamp(localTintWeight / (depth ? 6.2 : 9.0), 0, depth ? 0.34 : 0.16); + const lift = clamp(localLift, 0, depth ? 11 : 12); + const chromaRestore = clamp(localTintWeight / (depth ? 1.15 : 8.8), 0, depth ? 0.9 : 0.16); + r = lerp(clamp(r + lift, 0, 255), litBeforeQuantization.r, chromaRestore); + g = lerp(clamp(g + lift * 0.88, 0, 255), litBeforeQuantization.g, chromaRestore); + b = lerp(clamp(b + lift * 0.8, 0, 255), litBeforeQuantization.b, chromaRestore); + r = lerp(r, localTintR * inv, tintMix); + g = lerp(g, localTintG * inv, tintMix * 0.95); + b = lerp(b, localTintB * inv, tintMix * 0.92); } return `#${Math.round(clamp(r, 0, 255)).toString(16).padStart(2,'0')}${Math.round(clamp(g, 0, 255)).toString(16).padStart(2,'0')}${Math.round(clamp(b, 0, 255)).toString(16).padStart(2,'0')}`; } @@ -7045,7 +7286,9 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { return lights.map((p) => ({ x: asset.category === 'dynamic' && side === 'left' ? w - 1 - p.x : p.x, y: p.y, - c: colorToHex(p.c || asset.meta?.lightColor || nearestPaletteCode('#ffd86a')) + c: colorToHex(p.c || asset.meta?.lightColor || nearestPaletteCode('#ffd86a')), + assetLight: true, + intensity: Number.isFinite(p.intensity) ? p.intensity : 0.92 })).filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y) && p.x >= 0 && p.y >= 0 && p.x < w && p.y < h); } @@ -7074,6 +7317,21 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { return edgeDirs; } + function getDepthCornerStrength(edgeDirs) { + if (!edgeDirs?.length) return 0; + if (edgeDirs.length < 2) return 0; + let orthogonalPairs = 0; + for (let i = 0; i < edgeDirs.length; i++) { + for (let j = i + 1; j < edgeDirs.length; j++) { + const [ax, ay] = edgeDirs[i]; + const [bx, by] = edgeDirs[j]; + if ((ax && by) || (ay && bx)) orthogonalPairs++; + } + } + if (!orthogonalPairs) return edgeDirs.length >= 3 ? 0.6 : 0; + return clamp(0.42 + orthogonalPairs * 0.28 + (edgeDirs.length >= 3 ? 0.18 : 0), 0, 1.35); + } + function getDepthCellSelfShadow(depth, x, y, width, pixels, depths, phase, height = width) { if (!depth || !pixels || !depths) return 0; const edgeDirs = collectDepthEdgeDirs(x, y, width, pixels, depths, depth, height); @@ -7113,20 +7371,26 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { const nx = x + dx, ny = y + dy; return nx < 0 || ny < 0 || nx >= width || ny >= height || !pixels[ny * width + nx]; }); + const cornerStrength = getDepthCornerStrength(edgeDirs); const reach = Math.max(2.25, Math.max(width, height) * 0.46); let total = 0; for (const light of lights) { if (!light) continue; const d = Math.hypot(light.x - x, light.y - y); - const distanceFalloff = 1 - clamp(d / reach, 0, 1); - if (distanceFalloff <= 0) continue; + const distanceResponse = depthLocalLightResponse(d, reach); + if (distanceResponse <= 0) continue; const facing = getDepthLightFacing(depth, x, y, width, pixels, depths, light.x, light.y, height); if (!facing) continue; const sourceIntensity = clamp(Number(light.intensity ?? 1) || 1, 0.25, 1.85); - const edgeStrength = outerEdge ? 0.72 : 1; - total += facing * edgeStrength * distanceFalloff * distanceFalloff * sourceIntensity * (depth > 0 ? 20 : 14) * DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER; + const nearSource = Math.pow(clamp(1 - d / Math.max(1.2, reach * 0.18), 0, 1), 2.3); + const plateau = 0.74 + distanceResponse * 0.34; + const edgeFocus = 0.4 + facing * 0.95; + const edgeStrength = outerEdge ? 1.08 : 0.94; + const cornerBoost = 1 + cornerStrength * (0.9 + facing * 0.38); + const sourceBoost = 1 + nearSource * 1.12; + total += plateau * edgeFocus * edgeStrength * cornerBoost * sourceBoost * sourceIntensity * (depth > 0 ? 8.2 : 6.4) * DEPTH_LOCAL_LIGHT_RESPONSE_MULTIPLIER; } - return clamp(total, 0, depth > 0 ? 150 : 105); + return clamp(total, 0, depth > 0 ? 172 : 126); } function resizePixels(source, oldSize, newSize) { @@ -7386,6 +7650,83 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { }); } + function drawMoonJellyAquarium() { + return artRowsSized([ + '...........YY...........', + '..........YCCY..........', + '.........YNCCNY.........', + '........NQBBBBQN........', + '.......NQBAAAABQN.......', + '......NQBAACCAABQN......', + '......NBAAAAAAAABN......', + '.....NQBAAPPPPAABQN.....', + '.....NBAAPPYYPPAABN.....', + '....NQBAAPYYYYPPAABQN...', + '....NBAAPYYYYYYPPAABN...', + '....NBAAPYYYYYYPPAABN...', + '...NQBAAPYYYYYYPPAABQN..', + '...N.BAAPQQQQQQPPAAB.N..', + '...N.NYYQNNNNNNQYYN.N...', + '...N.TSYQY....YQYST.N...', + '....NTTSY......YSTTN....', + '....NSSSY......YSSSN....', + '....NSSSY..DD..YSSSN....', + '....NSSSY.DDDD.YSSSN....', + '....NSSSYYYYYYYYSSSN....', + '....NSSSTTTTTTTTSSSN....', + '....NTTTTSDDDDSTTTTN....', + '.....NTTTSD...DSTTTN....', + '.....NDDDSS...SSDDDN....', + '......NDDDDNNNDDDDN.....', + '.......NNNNNNNNNNN......', + '........................' + ], { + N: '#1e2030', + Y: '#ffe8a1', + C: '#f7ffff', + Q: '#9b7dff', + B: '#6dd8f0', + A: '#a6f5ff', + P: '#ff8cc8', + T: '#5f5968', + S: '#8a7f91', + D: '#3c3348' + }, 24, 28); + } + + function drawMoonJellyAquariumDepth() { + return depthRowsSized([ + '...........^^...........', + '..........^^^^..........', + '.........^^^^^^.........', + '........^^^^^^^^........', + '.......^^^^^^^^^^.......', + '......^^^^^^^^^^^^......', + '......^^^^^^^^^^^^......', + '.....^^^^^^..^^^^^^.....', + '.....^^^^^....^^^^^.....', + '....^^^^^^....^^^^^^....', + '....^^^^^^....^^^^^^....', + '....^^^^^^....^^^^^^....', + '...^^^^^^^....^^^^^^^...', + '...^^^^^^......^^^^^^...', + '...^^..^^......^^..^^...', + '...^^..^^......^^..^^...', + '....^^..^......^..^^....', + '....^^..^......^..^^....', + '....^^^^^..--..^^^^^....', + '....^^^^^.----.^^^^^....', + '....^^^^^^^^^^^^^^^^....', + '....^^^^^------^^^^^....', + '....^^^^^------^^^^^....', + '.....^^^^------^^^^.....', + '.....^^^^^....^^^^^.....', + '......^^^^^..^^^^^......', + '.......^^^^^^^^^^.......', + '........................' + ], 24, 28); + } + function drawCrescentTeaHouseDepth() { return depthRows([ '.......^^.......', @@ -9119,6 +9460,859 @@ function drawShipRipples(pos, time, seedValue = '', asset = null) { } + function drawAuroraObservatory() { + return artRowsSized([ + '............NNNN............', + '..........NNYYYYNN..........', + '.........NYYCCCCYYN.........', + '........NYYCCCCCCYYN........', + '.......NYYCCBBBBCCYYN.......', + '......NYYCBBBBBBBBCYYN......', + '......NYYBBBBBBBBBBYYN......', + '.....NYYBBBBBBBBBBBBYYN.....', + '.....NYYBBBBBBBBBBBBYYN.....', + '.....NYYYYYYYYYYYYYYYYN.....', + '....NNWWWWWWNNWWWWWWWWNN....', + '....NWWWWWWN..NWWWWWWWWN....', + '...NNWWWLLWNNNNWWLLWWWNN....', + '...NWWWLLLLWWWWLLLLWWWWN....', + '...NWWLLLLLLWWLLLLLLWWWN....', + '...NWWLLDDLLWWLLDDLLWWWN....', + '...NWWLLLLLLWWLLLLLLWWWN....', + '...NWWWWWWWWWWWWWWWWWWWN....', + '...NWWGGGGGGGGGGGGGGWWWN....', + '...NWWGTTTGGTTTTGGTTGWWN....', + '...NWWGTTTGGTTTTGGTTGWWN....', + '...NWWGGGGGGGGGGGGGGWWWN....', + '...NWWGGTTTGGGGGGTTGWWWN....', + '...NWWGGTTTGGDDGGTTGWWWN....', + '...NWWGGGGGGDDGGGGGGWWWN....', + '....NWWWWWWWWDDWWWWWWWN.....', + '....NNNNNNNNNNNNNNNNNN......', + '............................' + ], { + N: '#212532', Y: '#8b74dd', C: '#d9edff', B: '#8fb7f5', W: '#746453', L: '#fff0b4', G: '#c1ab84', T: '#70563f', D: '#3d2f28' + }, 28, 28); + } + + function drawHearthwindMill() { + return artRowsSized([ + '..........NNNN..........', + '.........NYYYYN.........', + '.........NYWWYN.........', + '........NYYWWYYN........', + '........NNNWWNNN........', + '.......N..NWWN..N.......', + '...NNNNN..NWWN..NNNNN...', + '..NPPPPNNNNWWNNNNPPPPN..', + '..NPPPPPPNNWWNNPPPPPPN..', + '..NPPPPPPPNNNNPPPPPPPN..', + '..NPPPPPPPPPPPPPPPPPPN..', + '..NQQQQQQQQQQQQQQQQQQN..', + '..NQQQQQQQQQQQQQQQQQQN..', + '..NQQLLQQQQQQQQQQLLQQN..', + '..NQLLLLQQQNNQQLLLLQQN..', + '..NQQLLQQQQNNQQQQLLQQN..', + '..NQQQQQGGGGGGQQQQQQQN..', + '..NQQGGGTTGGGGGGTTGQQN..', + '..NQQGTTTTGGDDGGTTTGQN..', + '..NQQGTTTTGGDDGGTTTGQN..', + '..NQQGGGGGGGDDGGGGGGQN..', + '..NQQQGGGGGGDDGGGGQQQN..', + '..NQQQQQQQQQDDQQQQQQQN..', + '..NQQQQQQQQQDDQQQQQQQN..', + '..NQQQQQQQQQDDQQQQQQQN..', + '..NQQQQQQQNNNNQQQQQQQN..', + '...NNNNNNNN..NNNNNNNN...', + '........................' + ], { + N: '#252934', Y: '#fff5d0', W: '#8bb8ff', P: '#8f5e47', Q: '#caa77f', L: '#ffe8a0', G: '#d6c29b', T: '#77543b', D: '#403027' + }, 24, 28); + } + + function drawTideglassLighthouse() { + return artRowsSized([ + '........NNNN........', + '.......NYYYYN.......', + '.......NYCCYN.......', + '......NYYCCYYN......', + '......NNNCCNNN......', + '.......N.CC.N.......', + '.......N.BB.N.......', + '......NN.BB.NN......', + '......NWWWWWWN......', + '......NWWLLWWN......', + '.....NNWWLLWWNN.....', + '.....NWWWWWWWWN.....', + '.....NWWGGGGWWN.....', + '.....NWWGTTGWWN.....', + '.....NWWGGGGWWN.....', + '....NNWWWWWWWWNN....', + '....NWWWWLLWWWWN....', + '....NWWWWLLWWWWN....', + '....NWWWWWWWWWWN....', + '....NWWWGGGGWWWN....', + '....NWWWGTTGWWWN....', + '....NWWWGGGGWWWN....', + '...NNWWWWWWWWWWNN...', + '...NWWWWWWWWWWWWN...', + '...NWWWGGWWGGWWWN...', + '...NWWWTTWWTTWWWN...', + '...NWWWGGWWGGWWWN...', + '..NNWWWWWWWWWWWWNN..', + '..NWWWWWWWWWWWWWWN..', + '..NWWWWWWDDWWWWWWN..', + '..NWWWWWWDDWWWWWWN..', + '..NWWWWGGDDGGWWWWN..', + '..NWWWWTTDDTTWWWWN..', + '..NWWWWGGDDGGWWWWN..', + '...NNNNNNDDNNNNNN...', + '........NNNN........' + ], { + N: '#212632', Y: '#fff0ad', C: '#eef7ff', B: '#8fc1ff', W: '#f2efe8', L: '#fff0b2', G: '#d7c5a8', T: '#8f6a4e', D: '#413128' + }, 20, 36); + } + + function drawMossrailDepot() { + return artRowsSized([ + '....NNNNNNNNNNNNNNNNNNNNNNNN....', + '...NYYYYYYYYYYYYYYYYYYYYYYYYN...', + '..NYYNNNNNNNNNNNNNNNNNNNNNNYYN..', + '..NYYNPPPPPPPPPPPPPPPPPPPPNYYN..', + '..NYYNPPPPPPPPPPPPPPPPPPPPNYYN..', + '..NYYNNNNNNNNNNNNNNNNNNNNNNYYN..', + '.NNWWWWWWWWWWWWWWWWWWWWWWWWWWNN.', + '.NWWWWWWWWWWWWWWWWWWWWWWWWWWWWN.', + '.NWWLLLLWWWWLLLLWWWWLLLLWWWWWN..', + '.NWWLLLLWWWWLLLLWWWWLLLLWWWWWN..', + '.NWWWWWWWWWWWWWWWWWWWWWWWWWWWN..', + '.NWWGGGGGGGGGGGGGGGGGGGGGGWWWN..', + '.NWWGTTTGGGGGGGGGGGGGGTTTGWWWN..', + '.NWWGGGGGGGGGNNNNGGGGGGGGGWWWN..', + '.NWWGTTTGGGGGNDDNGGGGGTTTGWWWN..', + '.NWWGGGGGGGGGNDDNGGGGGGGGGWWWN..', + '.NWWWWWWWWWWWWDDWWWWWWWWWWWWWN..', + '.NWWWWWWWWWWWWDDWWWWWWWWWWWWWN..', + '.NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.', + '................................' + ], { + N: '#232733', Y: '#f5d48f', P: '#7b5651', W: '#a9b8bf', L: '#ffeda7', G: '#d0b48d', T: '#7d5b45', D: '#3b2f2a' + }, 32, 20); + } + + function drawLanternLibrary() { + return artRowsSized([ + '.......NNNNNNNNNNNNNN.......', + '......NYYYYYYYYYYYYYYN......', + '.....NYYNNNNNNNNNNNNYYN.....', + '.....NYNPPPPPPPPPPPPNYN.....', + '....NNNNNNNNNNNNNNNNNNNN....', + '....NWWWWWWWWWWWWWWWWWWN....', + '...NNWWWLLLWWNNWWLLLWWWNN...', + '...NWWWLLLLWWWWWWLLLLWWWN...', + '...NWWWWLLWWWWWWWWLLWWWWN...', + '...NWWWWWWWWWWWWWWWWWWWWN...', + '...NWWGGGGGGGGGGGGGGGGWWN...', + '...NWWGTTTGGTTGGTTGGTTGWN...', + '...NWWGGGGGGGGGGGGGGGGWWN...', + '...NWWGTTTGGTTGGTTGGTTGWN...', + '...NWWGGGGGGGGGGGGGGGGWWN...', + '...NWWGGTTGGGGGGGGTTGGWWN...', + '...NWWGGTTGGGNNDGGTTGGWWN...', + '...NWWGGGGGGGNNDGGGGGGWWN...', + '...NWWWWWWWWWWDDWWWWWWWWN...', + '...NWWWWWWWWWWDDWWWWWWWWN...', + '....NWWWWWWWWNNNNWWWWWWN....', + '....NNNNNNNNN....NNNNNN.....', + '............................', + '............................' + ], { + N: '#222633', Y: '#e7c36c', P: '#704944', W: '#8a6a4a', L: '#ffeeb5', G: '#d7c0a0', T: '#6b5139', D: '#382c26' + }, 28, 24); + } + + function drawVelvetTheater() { + return artRowsSized([ + '....NNNNNNNNNNNNNNNNNNNN.....', + '...NYYYYYYYYYYYYYYYYYYYYN....', + '..NYYNNNNNNNNNNNNNNNNNNYYN...', + '..NYNPPPPPPPPPPPPPPPPPPNYN...', + '.NNNNNNNNNNNNNNNNNNNNNNNNNN..', + '.NWWWWWWWWWWWWWWWWWWWWWWWWN..', + '.NWWLLLLLLLLWWWWLLLLLLLLWWN..', + '.NWWLAAAAALLWWWWLLAAAAALWWN..', + '.NWWLLLLLLLLWWWWLLLLLLLLWWN..', + '.NWWWWWWWWWWWWWWWWWWWWWWWWN..', + '.NWWGGGGGGGGGGGGGGGGGGGGWWN..', + '.NWWGTTGGTTGGGGGGTTGGTTGWWN..', + '.NWWGGGGGGGGGNNGGGGGGGGGWWN..', + '.NWWGTTGGTTGGNDDNGGTTGGTGWWN.', + '.NWWGGGGGGGGGNDDNGGGGGGGGWWN.', + '.NWWWWWWWWWWWDDDWWWWWWWWWWN..', + '.NWWWWWWWWWWNDDDNWWWWWWWWWN..', + '.NNNNNNNNNNNNNNNNNNNNNNNNNN..', + '............................', + '............................' + ], { + N: '#231f2c', Y: '#f2bf68', P: '#7f2d47', W: '#5d4858', L: '#ffd692', A: '#f08ec0', G: '#b99a7d', T: '#654633', D: '#39262a' + }, 28, 20); + } + + function drawBloomBridgeGate() { + return artRowsSized([ + '..........NNNN..........', + '........NNYYYYNN........', + '.......NYYPPPPYYN.......', + '......NYYPYYYYPYYN......', + '.....NYYPYYNNYYPYYN.....', + '....NNYYYYN..NYYYYNN....', + '...NNWWWWWN..NWWWWWNN...', + '..NNWWWNNWWNNWWNNWWWNN..', + '..NWWWN..NWWWWN..NWWWN..', + '..NWWN....NWWN....NWWN..', + '..NWWN....NWWN....NWWN..', + '..NWWN....NWWN....NWWN..', + '..NWWNNNNNNWWNNNNNNWWN..', + '..NWWGGGGGGWWGGGGGGWWN..', + '..NWWGTTTGGWWGGTTTGWWN..', + '..NWWGGGGGGWWGGGGGGWWN..', + '..NWWPPPPPPWWPPPPPPWWN..', + '..NWWPPYYPPWWPPYYPPWWN..', + '..NWWPPPPPPWWPPPPPPWWN..', + '...NNWWWWWWWWWWWWWWNN...', + '....NNNNNNWWNNNNNNNN....', + '........NNWWNN..........', + '........NWWWWN..........', + '........NNNNNN..........' + ], { + N: '#242835', Y: '#f6d56c', P: '#f29fc3', W: '#7f6a5a', G: '#9aca7c', T: '#5b8e49' + }, 24, 24); + } + + function drawStarreefSubmarine() { + return artRowsSized([ + '................................', + '.............NNNNNN.............', + '..........NNNYYYYYYNNN..........', + '........NNYYCCCCCCCCYYNN........', + '......NNYYCCBBBBBBBBCCYYNN......', + '.....NYYCCBBBBBBBBBBBBCCYYN.....', + '....NYYCBBBBBNNNNBBBBBBCYYN.....', + '...NYYCBBBBBNGGGGNBBBBBCYYN.....', + '..NNYYBBBBBBNGTTGNBBBBBBYYNN....', + '.NNYYYYYYYYYNGGGGNYYYYYYYYYNN...', + '.NWWWWWWWWWWNNNNNNWWWWWWWWWWWN..', + '.NWWWWLLWWWWWWWWWWWWLLWWWWWWWN..', + '.NNWWWWWWWWWWWWWWWWWWWWWWWWWNN..', + '..NNNNNNNNNNNNNNNNNNNNNNNNNN....', + '................................', + '................................' + ], { + N: '#1f2431', Y: '#f4dc7a', C: '#d0f1ff', B: '#57b7d7', W: '#73544d', G: '#eaf5ff', T: '#89b2ff', L: '#fff2b6' + }, 32, 16); + } + + function drawAstrolabeCourierRight() { + return artRowsSized([ + '....NNNN....', + '...NYYYYN...', + '...NYYYYN...', + '...NNNNNN...', + '..NNWWWWNN..', + '..NWWCCWWN..', + '..NWWWCWWN..', + '...NWWWWN...', + '..NNWWWWNN..', + '.NNWWNNWWNN.', + '.NWWN..NWWN.', + '.NWWNNNNWWN.', + '.NWWWGGWWWN.', + '.NWWNGGNWWN.', + '..NNN..NNN..', + '...N....N...' + ], { + N: '#232833', Y: '#d6a17a', W: '#375476', C: '#d9eeff', G: '#9f6e46' + }, 12, 16); + } + + function drawPuddleToadRight() { + return artRowsSized([ + '............', + '...NN..NN...', + '..NYYNNYYN..', + '.NYYYYYYYYN.', + '.NYYNYYNYYN.', + '.NYYYYYYYYN.', + '.NWWYYYYWWN.', + '..NWWWWWWN..', + '...NNNNNN...', + '............' + ], { + N: '#202632', Y: '#7eb85c', W: '#d9eeff' + }, 12, 10); + } + + function drawRibbonSwanRight() { + return artRowsSized([ + '............', + '......NN....', + '.....NYYN...', + '....NYYYYN..', + '...NYYNNYYN.', + '.NNNYYNNYYN.', + 'NWWWWYYYYYN.', + 'NWWWWWWWWNN.', + '.NWWWWWWWN..', + '..NWWWWWN...', + '...NNNNN....', + '............' + ], { + N: '#222633', Y: '#ffd3dc', W: '#f7fbff' + }, 12, 12); + } + + function drawLanternBeetleRight() { + return artRowsSized([ + '............', + '....NNNN....', + '...NYYYYN...', + '..NYYCCYYN..', + '..NYYCCYYN..', + '.NNYYNNYYNN.', + '.NWWYYYYWWN.', + '..NWWWWWWN..', + '..NWN..NWN..', + '.NNN....NNN.', + '.N........N.', + '............' + ], { + N: '#202531', Y: '#f0d25f', C: '#fff1b5', W: '#7d4933' + }, 12, 12); + } + + function drawSmilePortrait() { + return artRowsSized([ + '......FFFFFFFFFFFF......', + '.....FNNNNNNNNNNNNF.....', + '....FNBBBBBBBBBBBBNF....', + '....FNBHHHHHHHHHHBNF....', + '....FNBHHHSSSSHHHBNF....', + '....FNBHHSSSSSSHHBNF....', + '....FNBHHSSSSSSHHBNF....', + '....FNBHHSEEESHHHBNF....', + '....FNBHHSSSSSSHHBNF....', + '....FNBHHHSDDSSHHBNF....', + '....FNBGGGSSSSGGGBNF....', + '....FNBGGGGGGGGGGBNF....', + '....FNBGGGGGGGGGGBNF....', + '....FNBGGGGGGGGGGBNF....', + '....FNBGGGGGGGGGGBNF....', + '....FNBGGTTGGGGTGBNF....', + '....FNBGTTTTGGTTTBNF....', + '....FNBGTTTTGGTTTBNF....', + '....FNBGGTTTGGTTGBNF....', + '....FNBGGGGGGGGGGBNF....', + '....FNBGGGGDDGGGGBNF....', + '....FNBGGGGDDGGGGBNF....', + '....FNBGGGGDDGGGGBNF....', + '....FNBGGGGDDGGGGBNF....', + '....FNBGGGGDDGGGGBNF....', + '....FNBGGGDDDDGGGBNF....', + '....FNBGGGDDDDGGGBNF....', + '....FNBBBBBBBBBBBBNF....', + '....FNNNNNNNNNNNNNNF....', + '.....FFFFFFFFFFFFFF.....', + '........................', + '........................' + ], { + F: '#a67c37', N: '#252836', B: '#67816b', H: '#4b3228', S: '#d5ad87', E: '#242834', D: '#5f4130', G: '#4e6b3f', T: '#395835' + }, 24, 32); + } + + function drawGreatWavePanel() { + return artRowsSized([ + '....FFFFFFFFFFFFFFFFFFFFFFFF....', + '...FNNNNNNNNNNNNNNNNNNNNNNNNF...', + '..FNCCCCCCCCCCCCCCCCCCCCCCCCNF..', + '..FNCWWWWWWWWWWWWWWWWWWCCCCCNF..', + '..FNCWWWWWWWWWWWWWWWWWCCCCCCNF..', + '..FNCWWWWWWWWWWWWWWCCCCCYYCCNF..', + '..FNCWWWWWWWWWWWWCCCCCCCCCMMNF..', + '..FNCWWWWWWWWWWCCCCCAAACCCCMNF..', + '..FNCWWWWWWWWCCCCCAAAAAACCCMNF..', + '..FNCWWWWWWCCCCCAAAWWWAAACCMNF..', + '..FNCWWWWCCCCCAAAWWWWWWAACCMNF..', + '..FNCWWWCCCAAACWWWWWWWWWACCMNF..', + '..FNCCWCCAAAACWWWWWWWWWWWCCMNF..', + '..FNCCCAAAAACWWWWWWWWWWWWWCMNF..', + '..FNCCAAAAACWWWWWWWWWWWWWWMNF..', + '..FNCCAAAACCWWWWWWWWWWWWWWMNF..', + '..FNCCCAACCCWWWWWWWWWWWWWWMNF..', + '..FNCCCCCCCCWWWWWWWWWWWWWWMNF..', + '..FNCCMMMMMCCCCCMMMMMMMCCCMNF..', + '..FNCCMMMMMMMCCMMMMMMMMCCCMNF..', + '..FNCCMMMMMMMMMMMMMMMMMCCCMNF..', + '..FNCCMMMMMMMMMMMMMMMMMCCCMNF..', + '..FNCCCCCCCCCCCCCCCCCCCCCCCNF..', + '..FNNNNNNNNNNNNNNNNNNNNNNNNNF..' + ], { + F: '#a67c37', N: '#252836', C: '#d3eaf9', W: '#4a97d6', A: '#ffffff', Y: '#f3d36a', M: '#745f56' + }, 32, 24); + } + + function drawSunflowerStillLife() { + return artRowsSized([ + '........NN..NN..........', + '.......NYYNNYYN.........', + '......NYYYYYYYYN........', + '.......NYYNNYYN.........', + '........NN..NN..........', + '..........GG............', + '.....NN..NN..NN..NN.....', + '....NYYNNYYNNYYNNYYN....', + '...NYYYYYYYYYYYYYYYYN...', + '....NYYNNYYNNYYNNYYN....', + '.....NN..NN..NN..NN.....', + '...........GG...........', + '......NN..NN..NN........', + '.....NYYNNYYNNYYN.......', + '....NYYYYYYYYYYYYN......', + '.....NYYNNYYNNYYN.......', + '......NN..NN..NN........', + '........GGGG............', + '........GGGG............', + '.......NBBBBBBN.........', + '......NBBBBBBBBN........', + '......NBBBBBBBBN........', + '......NBBBBBBBBN........', + '.......NBBBBBBN.........', + '........NBBBBN..........', + '........NBBBBN..........', + '.......NMMMMMMN.........', + '......NMMMMMMMMN........', + '......NNNNNNNNNN........', + '........................', + '........................', + '........................' + ], { + N: '#252836', Y: '#f0cc57', G: '#5e8b48', B: '#b48255', M: '#8c6a53' + }, 24, 32); + } + + function drawRosettaStela() { + return artRowsSized([ + '........NNNNNNNN........', + '.......NSSSSSSSSN.......', + '......NSSSSSSSSSSN......', + '......NSSSSSSSSSSN......', + '......NSSLLLSSLLSN......', + '......NSSSSSSSSSSN......', + '......NSSLLSSLLSSN......', + '......NSSSSSSSSSSN......', + '......NSSSLLLSSSSN......', + '......NSSSSSSSSSSN......', + '......NSSLLSSSSLSN......', + '......NSSSSSSSSSSN......', + '......NSSLLLSSLLSN......', + '......NSSSSSSSSSSN......', + '......NSSLLSSLLSSN......', + '......NSSSSSSSSSSN......', + '......NSSSLLLSSSSN......', + '......NSSSSSSSSSSN......', + '......NSSLLSSSSLSN......', + '......NSSSSSSSSSSN......', + '......NSSLLLSSLLSN......', + '......NSSSSSSSSSSN......', + '......NSSLLSSLLSSN......', + '......NSSSSSSSSSSN......', + '......NSSSLLLSSSSN......', + '......NSSSSSSSSSSN......', + '......NSSSSDDSSSSN......', + '......NSSSSDDSSSSN......', + '......NSSSSDDSSSSN......', + '.......NSSSDDSSSN.......', + '........NNNNNNNN........', + '........................' + ], { + N: '#252836', S: '#887b66', L: '#5d5446', D: '#6e5842' + }, 24, 32); + } + + function drawPharaohMask() { + return artRowsSized([ + '.........NNNNNN.........', + '........NYYYYYYN........', + '.......NYYBBBBYYN.......', + '......NYYBBBBBBYYN......', + '......NYYBSSSSBYYN......', + '......NYYBSSSSBYYN......', + '......NYYBSDDSBYYN......', + '......NYYBSEESBYYN......', + '......NYYBSSSSBYYN......', + '......NYYBSDDSBYYN......', + '......NYYBSSSSBYYN......', + '......NYYBSSSSBYYN......', + '......NYYBSDDSBYYN......', + '......NYYBSSSSBYYN......', + '......NYYBSSSSBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '......NYYBBSSBBYYN......', + '.......NYYBSSBYYN.......', + '........NYYSSYYN........', + '........NYYSSYYN........', + '.........NNNNNN.........', + '........................' + ], { + N: '#252836', Y: '#e0b94d', B: '#4a78bf', S: '#d7b585', E: '#232834', D: '#8c6035' + }, 24, 32); + } + + function drawStoneCircle() { + return artRowsSized([ + '................................', + '................................', + '............NN..NN............', + '..........NNSSNNSSNN..........', + '........NNSSSSSSSSSSNN........', + '.......NSSSSSSSSSSSSSSN.......', + '......NSSSSSSSSSSSSSSSSN......', + '.....NSSSNSSSN..NSSSNSSSN.....', + '....NSSSNSSSSN..NSSSSNSSSN....', + '....NSSSNSSSSN..NSSSSNSSSN....', + '....NSSSNSSSSN..NSSSSNSSSN....', + '....NSSSNSSSSN..NSSSSNSSSN....', + '....NSSSNSSSSNNNNSSSSNSSSN....', + '....NSSSNSSSSSSSSSSSSNSSSN....', + '....NSSSNSSSSSSSSSSSSNSSSN....', + '.....NSSSNSSSSSSSSSSNSSSN.....', + '......NSSSSSSSSSSSSSSSSN......', + '.......NSSSSSSSSSSSSSSN.......', + '........NNNNNNNNNNNNNN........', + '........GGGGGGGGGGGGGG........', + '.......GGTTGGGGGGGGTTGG.......', + '.......GGGGGGGGDDGGGGGG.......', + '.......GGGGGGGGDDGGGGGG.......', + '........NNNNNNNNNNNNNN........' + ], { + N: '#252836', S: '#8b8274', G: '#93b670', T: '#5d8d46', D: '#6c4a35' + }, 32, 24); + } + + function drawTerracottaSentinel() { + return artRowsSized([ + '.......NNNNNN.......', + '......NBBBBBBN......', + '.....NBBSSSSBBN.....', + '.....NBSSSSSSBN.....', + '.....NBSSDDSSBN.....', + '.....NBSSEESSBN.....', + '.....NBSSSSSSBN.....', + '.....NBBSSSSBBN.....', + '......NBBBBBBN......', + '......NBBBBBBN......', + '......NBBBBBBN......', + '......NBBBBBBN......', + '......NBBBBBBN......', + '.....NBBBBBBBBN.....', + '.....NBBBGGBBBN.....', + '.....NBBBGGBBBN.....', + '.....NBBBGGBBBN.....', + '.....NBBBGGBBBN.....', + '.....NBBBGGBBBN.....', + '.....NBBBBBBBBN.....', + '.....NBBNNNNBBN.....', + '.....NBN....NBN.....', + '....NBBN....NBBN....', + '....NBBN....NBBN....', + '....NBBN....NBBN....', + '....NBBN....NBBN....', + '....NBBN....NBBN....', + '....NBBN....NBBN....', + '....NMMN....NMMN....', + '....NMMN....NMMN....', + '.....NN......NN.....', + '....................' + ], { + N: '#252836', B: '#9a6a4f', S: '#be8964', E: '#1f2230', D: '#6f4838', G: '#7a5746', M: '#6b5143' + }, 20, 32); + } + + function drawRainBellTower() { + return artRowsSized([ + '........NNNN........', + '.......NYYYYN.......', + '......NYYYYYYN......', + '......NYYNNYYN......', + '......NNNWWNNN......', + '.......NWWWWN.......', + '.......NWWWWN.......', + '......NNWWWWNN......', + '......NWWGGWWN......', + '......NWWGGWWN......', + '......NWWGGWWN......', + '......NWWLLWWN......', + '......NWWGGWWN......', + '.....NNWWWWWWNN.....', + '.....NWWGGGGWWN.....', + '.....NWWGTTGWWN.....', + '.....NWWGGGGWWN.....', + '.....NWWWWWWWWN.....', + '.....NWWWLLWWWN.....', + '.....NWWWGGWWWN.....', + '.....NWWWGGWWWN.....', + '.....NWWWGGWWWN.....', + '....NNWWWGGWWWNN....', + '....NWWWWWWWWWWN....', + '....NWWWGGGGWWWN....', + '....NWWWGTTGWWWN....', + '....NWWWGGGGWWWN....', + '....NWWWWWWWWWWN....', + '....NWWWWDDWWWWN....', + '....NWWWWDDWWWWN....', + '....NWWGGDDGGWWN....', + '....NWWGGDDGGWWN....', + '....NWWWWDDWWWWN....', + '.....NNNNDDNNNN.....', + '........NNNN........', + '....................' + ], {N:'#242836',Y:'#f4d276',W:'#d9d8df',G:'#a49da3',L:'#fff0b6',T:'#6a5245',D:'#40322c'}, 20, 36); + } + + function drawCrimsonPagoda() { + return artRowsSized([ + '.........NNNNNN.........', + '.......NNYYYYYYNN.......', + '......NYYYYYYYYYYN......', + '......NNNNWWNNNNNN......', + '.....NNRRRRRRRRRRNN.....', + '.....NWRRRRRRRRRRWN.....', + '....NNWWWWWWWWWWWWNN....', + '....NWWWWWWWWWWWWWWN....', + '...NNRRRRRRRRRRRRRRNN...', + '...NWRRLLRRRRRRLLRRWN...', + '...NWWWWWWWWWWWWWWWWN...', + '..NNWWWWWWWWWWWWWWWWNN..', + '..NWRRRRRRRRRRRRRRRRWN..', + '..NWRRLLRRRNNRRRLLRRWN..', + '..NWWWWWWWWNNWWWWWWWWN..', + '.NNWWWWWWWWWWWWWWWWWWNN.', + '.NWRRRRRRRRRRRRRRRRRRWN.', + '.NWRRLLRRRRRRRRRRLLRRWN.', + '.NWWWWWWWWWWWWWWWWWWWWN.', + '.NWWGGGGGGGGGGGGGGGGWWN.', + '.NWWGTTTGGTTTTGGTTTGWWN.', + '.NWWGGGGGGGGGGGGGGGGWWN.', + '.NWWWWWWWWWWWWWWWWWWWWN.', + '.NWWWWWWWWWWWWWWWWWWWWN.', + '.NWWGGGGGGGGDDGGGGGGWWN.', + '.NWWGTTTGGGGDDGGGTTGWWN.', + '.NWWGGGGGGGGDDGGGGGGWWN.', + '.NWWWWWWWWWWDDWWWWWWWWN.', + '.NWWWWWWWWWWDDWWWWWWWWN.', + '..NNNNNNNNNNNNNNNNNNNN..', + '........................', + '........................' + ], {N:'#242833',Y:'#efc05e',W:'#4f403f',R:'#9c4354',L:'#ffd99f',G:'#cbb28d',T:'#6c513b',D:'#362a25'}, 24, 32); + } + + function drawMeteorForge() { + return artRowsSized([ + '................................', + '........NNNNNNNNNNNN............', + '......NNYYYYYYYYYYYYNN..........', + '.....NYYNNNNNNNNNNNNYYN.........', + '....NNNNNNNNNNNNNNNNNNNN........', + '...NWWWWWWWWWWWWWWWWWWWWN.......', + '..NNWWWLLLLWWWWWWLLLLWWWNN......', + '..NWWWLLLLLLWWWWLLLLLLWWWN......', + '..NWWWWLLLLLWWWWLLLLLWWWWN......', + '..NWWWWWWWWWWWWWWWWWWWWWWN......', + '.NNWWWWWWWWWWWWWWWWWWWWWWNN.....', + '.NWWGGGGGGGGGGGGGGGGGGGGWWN.....', + '.NWWGTTGGGTTGGGGGGTTGGGTGWN.....', + '.NWWGGGGGGGGGNNNNGGGGGGGGWN.....', + '.NWWGTTGGGGGGNDDNGGGGGTTGWN.....', + '.NWWGGGGGGGGGNDDNGGGGGGGGWN.....', + '.NWWWWWWWWWWWWDDWWWWWWWWWWN.....', + '.NWWWWLLWWWWWWDDWWWWWWLLWWN.....', + '.NWWWWWWWWWWWWDDWWWWWWWWWWN.....', + '.NWWGGGGGGGGGGDDGGGGGGGGWWN.....', + '.NWWGTTTGGGGGGDDGGGGGTTTGWN.....', + '.NWWGGGGGGGGGGDDGGGGGGGGWWN.....', + '.NNNNNNNNNNNNNNNNNNNNNNNNNN.....', + '................................' + ], {N:'#242833',Y:'#6f8fd8',W:'#5f544f',L:'#ffcf8a',G:'#b9916a',T:'#ff8f52',D:'#352924'}, 32, 24); + } + + function drawInkGardenScreen() { + return artRowsSized([ + 'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NCMMMCCCCCCCCCCCCCCCCCCCCCCMMM CN'.replace(/ /g,''), + 'NCMMMMCCCCCCCCCCCCCCCCCCCCMMMMCN', + 'NCMMMMMCCCCCCCGGGGCCCCCCMMMMMCN', + 'NCMMMMMMCCCCCGGGGGGCCCCMMMMMMCN', + 'NCMMMMMMMCCCCGGGGGGCCCCMMMMMMCN', + 'NCMMMMMMCCCCCGGGGGGCCCCMMMMMMCN', + 'NCMMMMMCCCCCCCGGGGCCCCMMMMMMCN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NCCCCCCCCCCCCCNNNNCCCCCCCCCCCCN', + 'NCCCCCCCCCCCCNDDDDNCCCCCCCCCCCN', + 'NCCCCCCCCCCCCNDDDDNCCCCCCCCCCCN', + 'NCCCCCCCCCCCCNNNNNNCCCCCCCCCCCN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NCGGGCCCCCCCCCCCCCCCCCCCCGGGCCN', + 'NCGTGCCCCCCCCCCCCCCCCCCCCGTGCCN', + 'NCGGGCCCCCCCCCCCCCCCCCCCCGGGCCN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NCCCCCCCCCCCCCCCCCCCCCCCCCCCCCN', + 'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN' + ], {N:'#252836',C:'#ece6d8',M:'#2a554c',G:'#7ab08a',T:'#4f8a5e',D:'#716159'}, 32, 24); + } + + function drawMeadowTotem() { + return artRowsSized([ + '........NNNN........', + '.......NYYYYN.......', + '......NYYGGYYN......', + '......NYYGGYYN......', + '......NYYNNYYN......', + '......NYYSSYYN......', + '......NYYSSYYN......', + '......NYYNNYYN......', + '......NYYGGYYN......', + '......NYYGGYYN......', + '......NYYSSYYN......', + '......NYYSSYYN......', + '......NYYNNYYN......', + '......NYYYYYYN......', + '......NYYYYYYN......', + '......NYYYYYYN......', + '......NYYYYYYN......', + '......NYYYYYYN......', + '......NYYYYYYN......', + '......NYYYYYYN......', + '......NYYYYYYN......', + '......NYYDDYYN......', + '......NYYDDYYN......', + '......NYYDDYYN......', + '......NYYDDYYN......', + '.......NDDDDN.......', + '........NNNN........', + '....................' + ], {N:'#252836',Y:'#a57b5c',G:'#97cb6f',S:'#f1d691',D:'#5b4337'}, 20, 28); + } + + function drawTwilightCaravan() { + return artRowsSized([ + '................................', + '...........NNNNNNNN.............', + '........NNNYYYYYYYYNN...........', + '......NNYYPPPPPPPPYYNN..........', + '.....NYYPPPPPPPPPPPPYYN.........', + '....NYYPPPPPPPPPPPPPPYYN........', + '...NNWWWWWWWWWWWWWWWWWWNN.......', + '...NWWWWLLWWWWLLWWWWLLWWN.......', + '...NWWWWWWWWWWWWWWWWWWWWN.......', + '...NWWGGGGGGGGGGGGGGGGWWN.......', + '...NWWGTTTGGTTGGTTGGTTGWN.......', + '...NWWGGGGGGGGGGGGGGGGWWN.......', + '..NNWWWWWWWWWWWWWWWWWWWWNN......', + '..NWWWWNNWWWWNNWWWWNNWWWWN......', + '..NWWWN..NWWWN..NWWWN..NWWN......', + '..NNNN....NNNN....NNNN..NN......' + ], {N:'#252836',Y:'#c49b5b',P:'#7e5aa8',W:'#7b6654',L:'#ffe09c',G:'#8db873',T:'#5d8b45'}, 32, 16); + } + + function drawPepperFoxRight() { + return artRowsSized([ + '................', + '................', + '.......NN.......', + '......NYYN......', + '.....NYYYYNN....', + '....NYYYYYYN....', + '...NYYYYYYYYN...', + '...NYYYYNYYYN...', + '..NYYYYYYYNWN...', + '..NYYYYYYYWWN...', + '..NYYYYYYWWN....', + '...NYYYYWWN.....', + '....NYYWWWNN....', + '....NWWWWWWN....', + '.....NN..NN.....', + '................' + ], {N:'#252836',Y:'#d56f3f',W:'#fff1dd'}, 16, 16); + } + + function drawGlassMantaRight() { + return artRowsSized([ + '................', + '.......NN.......', + '.....NNCCNN.....', + '...NNCCCCCCNN...', + '..NCCCCCCCCCCN..', + '.NCCCCCCCCCCCCN.', + 'NNCCCCCCCCCCCCNN', + '.NCCCCCCCCCCCCN.', + '..NNCCCCCCCCNN..', + '....NNCCCCNN....', + '......NCCN......', + '.......NN.......' + ], {N:'#252836',C:'#7fdaf2'}, 16, 12); + } + + function drawFestivalDrummerRight() { + return artRowsSized([ + '.....NNNN.....', + '....NYYYYN....', + '....NYYYYN....', + '....NNNNNN....', + '...NNRRRRNN...', + '...NRRWWRRN...', + '...NRRWWRRN...', + '....NWWWWN....', + '..NNNWWWWNN...', + '.NNWWNNNNWWN..', + '.NWWN.TTNWWN..', + '.NWWNNNNNWWN..', + '.NWWN....NWN..', + '.NWWN....NWN..', + '..NN......NN..', + '..............' + ], {N:'#252836',Y:'#e0b18c',R:'#d4505f',W:'#425fb4',T:'#a26e4b'}, 14, 16); + } + + function drawBloomSpriteRight() { + return artRowsSized([ + '............', + '....NNNN....', + '...NYYYYN...', + '..NYYGGYYN..', + '..NYYGGYYN..', + '.NNYYYYYYNN.', + '.NWWYYYYWWN.', + '..NWWWWWWN..', + '..NWN..NWN..', + '.NN....NNN..', + '............', + '............' + ], {N:'#252836',Y:'#ffd3a8',G:'#ff8fc0',W:'#7bc56a'}, 12, 12); + } + window.PixelIslandDebug = { ...(window.PixelIslandDebug || {}), applySyncEvent }; bootstrap(); })(); diff --git a/assets.json b/assets.json new file mode 100644 index 0000000..ca1edbb --- /dev/null +++ b/assets.json @@ -0,0 +1,2815 @@ +[ + { + "id": "dkjphwcy69za", + "name": "Crescent Tea House", + "category": "static", + "subtype": "building", + "width": 16, + "height": 16, + "pixels": ".......NN.............N00N...........N00N.............NN............wwwwwww........wgggggggw......wggNggNggw......ggg0gg0ggg......gggggggggg......gggNAANggg......gggANNAggg......gggANNAggg.......ggAAAAgg.........wwwwww..........ggAAgg.........wwwwwwww.....", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 6, + "y": 5, + "c": "N" + }, + { + "x": 9, + "y": 5, + "c": "N" + }, + { + "x": 7, + "y": 10, + "c": "N" + } + ], + "lightColor": "N", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......11.............1111...........1111.............11............-------........-1111111-......-11111111-......-11111111-......-11111111-......-111--111-......-111--111-......-111--111-.......--------.........------..........--11--.........--------.....", + "door": { + "x": 7, + "y": 14 + } + }, + "contentHash": "fnv1a:122df3c6" + }, + { + "id": "413sk5ay69zk", + "name": "Prism Sakura", + "category": "static", + "subtype": "nature", + "width": 16, + "height": 16, + "pixels": "......................................QQ.Q..........QQUUQQQ........QUUQQQUQ.......QQQUQQUQQQ.......QQUUUQQ...........QUQ..............k..............eke............ekkke..........eekkkee...........kkk.............ksk............sssss..........sssssss......", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": true, + "particlePixels": [ + { + "x": 5, + "y": 4, + "c": "Q", + "dir": "up" + }, + { + "x": 10, + "y": 5, + "c": "P", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "Q", + "dir": "up" + }, + "depthPixels": "......................11.1..........1111111........11111111.......1111111111.......1111111...........111..............-..............---............-----..........-------...........---.............---............-----..........-------......................", + "door": null + }, + "contentHash": "fnv1a:729945aa" + }, + { + "id": "njlfq4gy69zo", + "name": "Clockwork Whale", + "category": "static", + "subtype": "ship", + "width": 16, + "height": 16, + "pixels": ".......................................................................................................N..............NN...........nnSSSSSn.......nSSSSSSSSn.....nSSS0SSS0Sn.....nSSSSSSSSSn.N....nSSSSSSSn.NN.....nnnnnnn.NN.......oooooo...........oooo.......", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......................................1..............11...........11111111.......1111111111.....11111111111.....11111111111.1....111111111.11.....-------.11.......------...........----.......................................................................", + "door": null + }, + "contentHash": "fnv1a:64c5bc09" + }, + { + "id": "s4e450ky69zt", + "name": "Lantern Cat", + "category": "dynamic", + "subtype": "animal", + "width": 16, + "height": 16, + "pixels": ".....................................................................................................................E..E...........E9999E..........90909...........99w99..........ddddddd........dddNNdddN.......dddddddNN........d..ddd.........EE..E.E.......", + "faces": { + "right": ".....................................................................................................................E..E...........E9999E..........90909...........99w99..........ddddddd........dddNNdddN.......dddddddNN........d..ddd.........EE..E.E.......", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...................................1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111...................................................", + "door": null + }, + "contentHash": "fnv1a:ae4c582f" + }, + { + "id": "i1hkr1dy69zw", + "name": "Cloud Koi", + "category": "dynamic", + "subtype": "fish", + "width": 16, + "height": 16, + "pixels": ".....................................................................................................................................O..............OOO............OSSSOOO........OSSSSSSSO......OSS0SSS0SSO......OSSSSSSSO..Q.....OSSSOOO..QQ.......O......Q...", + "faces": { + "right": ".....................................................................................................................................O..............OOO............OSSSOOO........OSSSSSSSO......OSS0SSS0SSO......OSSSSSSSO..Q.....OSSSOOO..QQ.......O......Q...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": true, + "particlePixels": [ + { + "x": 5, + "y": 8, + "c": "O", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "O", + "dir": "up" + }, + "depthPixels": null, + "door": null + }, + "contentHash": "fnv1a:ee34e211" + }, + { + "id": "do3eje4y69zy", + "name": "Paper Crane", + "category": "dynamic", + "subtype": "bird", + "width": 16, + "height": 16, + "pixels": ".......................................................................................................................3..............333............33733..........3377333........3377E7733.........37E3.............EE.............E..E...........E....E......", + "faces": { + "right": ".......................................................................................................................3..............333............33733..........3377333........3377E7733.........37E3.............EE.............E..E...........E....E......", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": null, + "door": null + }, + "contentHash": "fnv1a:b14c3672" + }, + { + "id": "4ymi1wqy6a00", + "name": "Moon Lantern", + "category": "static", + "subtype": "building", + "width": 16, + "height": 16, + "pixels": ".......5..............555.............505............55555..........sssssss........skkkkkkks.......kbbkkbbk.......skk5555kks......kkkk55kkkk......kkkE55Ekkk......kkkEEEEkkk......kkkUEEUUkk.......kkUEEUk.........kkkkkkkk.........kkkkkk..........ssssss......", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 6, + "y": 7, + "c": "5" + }, + { + "x": 7, + "y": 7, + "c": "5" + }, + { + "x": 8, + "y": 7, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......1..............111.............111............11111..........-------........-1111111-.......-111111-.......-11111111-......-11111111-......-111--111-......-111--111-......-111--111-.......-111111-........--------.........------..........------......", + "door": { + "x": 7, + "y": 14 + } + }, + "contentHash": "fnv1a:68b9107e" + }, + { + "id": "s74ryg2y6a08", + "name": "Glass Fern", + "category": "static", + "subtype": "nature", + "width": 16, + "height": 16, + "pixels": ".......................................i..............i6i............i666i........O..i6i6i..O......O.i6i6i.O........Oi666iO..........i6i6i..........i66666.........i666i6i........i6i6i6i6i.........ppppp...........pkkkp..........ppkkkpp.........kkkkkkk......", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......................1..............111............11111........1..11111..1......1.11111.1........1111111..........11111..........111111.........1111111........111111111.........11111...........11111..........1111111.........1111111......................", + "door": null + }, + "contentHash": "fnv1a:b3bc2051" + }, + { + "id": "bpl16ouy6a0f", + "name": "Linen Cottage", + "category": "static", + "subtype": "building", + "width": 16, + "height": 16, + "pixels": "......................................................................................kkkk...........kkkkkk.........kkkkkkkk.......kkkkkkkkkk......kkkkkkkkkk.......hh9hhhhh........hddddd55........hddddd55........hdwwwddh........hdwwwddk........hhwwwhhh....", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 10, + "y": 9, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "......................................................1111...........111111.........11111111.......1111111111......1111111111.......11111111........11111111........11111111........11111111........11111111........11111111....................................", + "door": { + "x": 7, + "y": 13 + } + }, + "contentHash": "fnv1a:4fc8c8e4" + }, + { + "id": "kfci33qy6a0n", + "name": "Pine Cluster", + "category": "static", + "subtype": "nature", + "width": 16, + "height": 16, + "pixels": "......................................................................iii............iiiii...........aiiii..........iiiiiimmm.......iiiiiiaiii.....iiiiiimmmmm.....iiiiiiiiiiii...iiiiiimmmmmmm...iiiiiiiiiiiiii......kmmmmmmmmm......kk..kk..........kk..kk....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "......................................111............11111...........11111..........111111111.......1111111111.....11111111111.....111111111111...1111111111111...11111111111111......1111111111......11..11..........11..11....................................", + "door": null + }, + "contentHash": "fnv1a:420bbd1e" + }, + { + "id": "6vyaizcy6a0w", + "name": "Coral Skiff", + "category": "static", + "subtype": "ship", + "width": 16, + "height": 16, + "pixels": "........................................................o...............o..............05o............005o...........0055o..........05555o.............ooo.........V...oo...V.....VVVllllllVV.....VlllllllllV......llllllll.........xxxxxx...........xxxx.......", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........................1...............1..............11.............111............1111...........11111..............---.........1...--...1.....111-------1.....-----------......--------.........------...........----.......................................", + "door": null + }, + "contentHash": "fnv1a:7d1af0a3" + }, + { + "id": "h4vumx6y6a0z", + "name": "Sprout Fox", + "category": "dynamic", + "subtype": "animal", + "width": 16, + "height": 16, + "pixels": ".........................................................................................................................i..............i6i.........999..i.........90099..........99900999........9l9ll9099.......9999999..........9..9.9.........xx..xxx.......", + "faces": { + "right": ".........................................................................................................................i..............i6i.........999..i.........90099..........99900999........9l9ll9099.......9999999..........9..9.9.........xx..xxx.......", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...................................1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111...................................................", + "door": null + }, + "contentHash": "fnv1a:1ee0e8e9" + }, + { + "id": "n2rre9uy6a13", + "name": "Violet Moth", + "category": "dynamic", + "subtype": "animal", + "width": 16, + "height": 16, + "pixels": ".......................................................................................................................................T.............TTXTT..........TTXrXTT........TTXXrXXTT.........TXrXT............ErE............P.E.P..........P.....P.....", + "faces": { + "right": ".......................................................................................................................................T.............TTXTT..........TTXrXTT........TTXXrXXTT.........TXrXT............ErE............P.E.P..........P.....P.....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": null, + "door": null + }, + "contentHash": "fnv1a:17684793" + }, + { + "id": "qpbwzi9y6a15", + "name": "Lantern Walker", + "category": "dynamic", + "subtype": "human", + "width": 16, + "height": 16, + "pixels": "......................................................................................EEE............E555E...........E5s5E............555............UUUUU..........UUUU5U5.........UUUU.55..........nnnU............n.nn............n..n...........EE..EE......", + "faces": { + "right": "......................................................................................EEE............E555E...........E5s5E............555............UUUUU..........UUUU5U5.........UUUU.55..........nnnU............n.nn............n..n...........EE..EE......", + "left": "mirror" + }, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 9, + "y": 7, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...................................1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111...................................................", + "door": null + }, + "contentHash": "fnv1a:32eb2b41" + }, + { + "id": "diitnqry6a19", + "name": "Wildflower Patch", + "category": "static", + "subtype": "nature", + "width": 8, + "height": 8, + "pixels": ".........eQeNe..e0eSeQe.eeeeeee.eNeQe0e.eeeeeee..ieiei....kk....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".........11111..1111111.1111111.1111111.1111111..11111....11....", + "door": null + }, + "contentHash": "fnv1a:4a7f5581" + }, + { + "id": "f5wcp4iy6a1b", + "name": "River Stones", + "category": "static", + "subtype": "nature", + "width": 8, + "height": 8, + "pixels": "..................ff.....f88f...f8cc8f...f8888f...feif.....ff...", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..........11.....1111...111111...111111...1111.....11...........", + "door": null + }, + "contentHash": "fnv1a:52d1f905" + }, + { + "id": "s7k786dy6a1d", + "name": "Maple Canopy", + "category": "static", + "subtype": "nature", + "width": 16, + "height": 16, + "pixels": "......................VV............VVhhVV.........VVhhNNVV.......VVhhNNNNVV......VhhNNeeNNV.....VhhNNeeeeNNV....VhNNeeeeeeNV....VNNee11eeeNV.....VNNeeeeeeNV.....VVNeeeeNNV.......VVNNNNNV..........pppp...........pppppp..........pppppp.........tttttttt.....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "......11............111111.........11111111.......1111111111......1111111111.....111111111111....111111111111....111111111111.....1111111111......1111111111.......11111111..........----...........------..........------.........--------.....................", + "door": null + }, + "contentHash": "fnv1a:1ad36d0b" + }, + { + "id": "zxghctgy6a1i", + "name": "Misty Falls", + "category": "static", + "subtype": "nature", + "width": 16, + "height": 16, + "pixels": "....................eeeeee.........egggggge.......eggOOOOgge......egO3333Oge......egO3SS3Oge......egO3SS3Oge......egO3SS3Oge......egO3SS3Oge......egO3333Oge.......eO3333Oe.........OO33OO..........333333.........3bbbbbb3.......3bbbbbbbb3......3333333333....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": true, + "particlePixels": [ + { + "x": 6, + "y": 8, + "c": "3", + "dir": "up" + }, + { + "x": 10, + "y": 8, + "c": "3", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "3", + "dir": "up" + }, + "depthPixels": "....111111.........11111111.......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111......1111111111.......11111111.........111111..........------.........--------.......----------......----------....................", + "door": null + }, + "contentHash": "fnv1a:8ac4c6c5" + }, + { + "id": "1rfqz3ay6a1n", + "name": "Lotus Pond", + "category": "static", + "subtype": "nature", + "width": 16, + "height": 12, + "pixels": "....................................ei....ei......eiiie..eiie.....iiQQiiiiQMi....iiQQMQQiiQQii...iiSSSSSSSSSSi...iSSSSSSSSSSSi...iiSSSSSSSSSii....iiiSSSSiii.......iiiiiiii.........o....o......", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": true, + "particlePixels": [ + { + "x": 6, + "y": 6, + "c": "M", + "dir": "up" + }, + { + "x": 11, + "y": 5, + "c": "0", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "M", + "dir": "up" + }, + "depthPixels": "....................11....11......11111..1111.....11111111111....1111111111111...1111----11111...111-------111...1111----11111....1111111111.......11111111.........-....-......................", + "door": null + }, + "contentHash": "fnv1a:0f18431e" + }, + { + "id": "koiuytsy6a1s", + "name": "Mossy Arch", + "category": "static", + "subtype": "nature", + "width": 16, + "height": 16, + "pixels": ".....................................eeee...........egggge.........egggggge.......eggeeeegge......ege....ege......ege....ege......ege....ege......ege....ege......ege....ege......eggeeeegge......eeecccceee........cccccc.........ccc..ccc.......oooo..oooo....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".....................1111...........111111.........11111111.......1111..1111......111....111......111....111......111....111......111....111......111....111......1111..1111......1111111111........------.........---..---.......----..----....................", + "door": null + }, + "contentHash": "fnv1a:d89452f4" + }, + { + "id": "pj50yr5y6a20", + "name": "Sunflower Grove", + "category": "static", + "subtype": "nature", + "width": 12, + "height": 16, + "pixels": ".........................NN..NN..NN.NVVN.VVN.NVVNVpVNVpVNVpV.NVV..VV..VV..ee..ee..ee..eaeeeaeeae.aeeeeeeeeea.aeaeaeaeaea..e..e..e..e..k..k..k..k..k..k..k..k.kkkkkkkkkk..eaeaeaeaea...kkkkkkkk..", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".............11..11..11.1111.111.111111111111111.111..11..11..11..11..11..1111111111.11111111111.11111111111..1..1..1..1..1..1..1..1..1..1..1..1.1111111111..1111111111...11111111..............", + "door": null + }, + "contentHash": "fnv1a:66efaabf" + }, + { + "id": "5nzjl30y6a28", + "name": "Reed Bed", + "category": "static", + "subtype": "nature", + "width": 12, + "height": 12, + "pixels": "................ccc.......c.ccg.c.....gcccgcg.....gcccgcc.....gcccgcc....33333SS33..3SSSSSWWSS3.3SWWWWWWWS3..33SSSSSS3....eeeeee.......kkkk.....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "................111.......1.111.1.....1111111.....1111111.....1111111....111111111..11111111111.11111111111..111111111....111111.......1111.....", + "door": null + }, + "contentHash": "fnv1a:d4c76094" + }, + { + "id": "jxztkudy6a2e", + "name": "Meadow Hare", + "category": "dynamic", + "subtype": "animal", + "width": 12, + "height": 12, + "pixels": "........................................cc.........cddc........cdddc......cddMMdc.....cddoodc.....cdddddc.....cddddd.......d.dd.......kk.k.k....", + "faces": { + "right": "........................................cc.........cddc........cdddc......cddMMdc.....cddoodc.....cdddddc.....cddddd.......d.dd.......kk.k.k....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "................11.........1111........11111......1111111.....1111111.....1111111.....111111.......1.11.......11.1.1............................", + "door": null + }, + "contentHash": "fnv1a:2520de66" + }, + { + "id": "lb3ho6xy6a2h", + "name": "Brook Turtle", + "category": "dynamic", + "subtype": "animal", + "width": 12, + "height": 10, + "pixels": "........................................eee.......eaaaae.....eaa11aae....eaaeeaaee....eaaaaae......eeee..S......o..oSS..", + "faces": { + "right": "........................................eee.......eaaaae.....eaa11aae....eaaeeaaee....eaaaaae......eeee..S......o..oSS..", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "............................111.......111111.....11111111....111111111....1111111......1111..1......1..111..............", + "door": null + }, + "contentHash": "fnv1a:d8ac1b11" + }, + { + "id": "wyf8x9gy6a2n", + "name": "Red Panda", + "category": "dynamic", + "subtype": "animal", + "width": 12, + "height": 12, + "pixels": "...........................MM..MM.....MhMhMhhM....MhhMMhhM....MhhtthhM.....hZZZZh.....hZZZZZZh....hZZMMZZh....hZZZZZZh.....Z..Z.Z.....k...k.k...", + "faces": { + "right": "...........................MM..MM.....MhMhMhhM....MhhMMhhM....MhhtthhM.....hZZZZh.....hZZZZZZh....hZZMMZZh....hZZZZZZh.....Z..Z.Z.....k...k.k...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...............11..11.....11111111....11111111....11111111.....111111.....11111111....11111111....11111111.....1..1.1.....1...1.1...............", + "door": null + }, + "contentHash": "fnv1a:d2fd3caf" + }, + { + "id": "eg4ckyiy6a2t", + "name": "River Otter", + "category": "dynamic", + "subtype": "animal", + "width": 14, + "height": 8, + "pixels": ".................kkk..........kggggkk......kgg44gggkk....kggxxgggggk...kgggggggggk....kgggg..gg......ooo...o....", + "faces": { + "right": ".................kkk..........kggggkk......kgg44gggkk....kggxxgggggk...kgggggggggk....kgggg..gg......ooo...o....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".................111..........1111111......1111111111....11111111111...11111111111....11111..11......111...1....", + "door": null + }, + "contentHash": "fnv1a:bd0000ef" + }, + { + "id": "xwr5wr6y6a2x", + "name": "Amber Deer", + "category": "dynamic", + "subtype": "animal", + "width": 14, + "height": 14, + "pixels": ".................................V............V.V..........VV9VV.........V999VV.......VV9xx9VV......V999999V......V999999VV.....V9999999V......V99999V.......V.VV.V.......k..VV..k......k..VV..k....", + "faces": { + "right": ".................................V............V.V..........VV9VV.........V999VV.......VV9xx9VV......V999999V......V999999VV.....V9999999V......V99999V.......V.VV.V.......k..VV..k......k..VV..k....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...................1............1.1..........11111.........111111.......11111111......11111111......111111111.....111111111......1111111.......1.11.1.......1..11..1......1..11..1..................", + "door": null + }, + "contentHash": "fnv1a:b497b00e" + }, + { + "id": "l2antp0y6a33", + "name": "Forest Owl", + "category": "dynamic", + "subtype": "bird", + "width": 10, + "height": 12, + "pixels": ".......................dd.d.....dkkkkd....k4444k...k44ww44k..k444444k..kk4444kk...kggggk....kggggk....k.kk.k.....k..k...", + "faces": { + "right": ".......................dd.d.....dkkkkd....k4444k...k44ww44k..k444444k..kk4444kk...kggggk....kggggk....k.kk.k.....k..k...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".............11.1.....111111....111111...11111111..11111111..11111111...111111....111111....1.11.1.....1..1.............", + "door": null + }, + "contentHash": "fnv1a:6e50e7b9" + }, + { + "id": "byljnniy6a36", + "name": "Kingfisher", + "category": "dynamic", + "subtype": "bird", + "width": 10, + "height": 8, + "pixels": "........................W........WWWM.....WnMMMMd..WWnMMssd...Wnnnnd......o.o...", + "faces": { + "right": "........................W........WWWM.....WnMMMMd..WWnMMssd...Wnnnnd......o.o...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..............1........1111.....1111111..11111111...111111......1.1.............", + "door": null + }, + "contentHash": "fnv1a:5eaf945f" + }, + { + "id": "ybigmijy6a39", + "name": "Pond Duck", + "category": "dynamic", + "subtype": "bird", + "width": 12, + "height": 10, + "pixels": "........................................ii.........i4444......i444iiid....i4444444d...iii4444d......4..4.......k....k...", + "faces": { + "right": "........................................ii.........i4444......i444iiid....i4444444d...iii4444d......4..4.......k....k...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "............................11.........11111......11111111....111111111...11111111......1..1.......1....1...............", + "door": null + }, + "contentHash": "fnv1a:aebe8348" + }, + { + "id": "uvnxnbmy6a3c", + "name": "Heron", + "category": "dynamic", + "subtype": "bird", + "width": 10, + "height": 16, + "pixels": "...................................3........333........33c......3333.....333ss.....33333......3333.......33........33........33........33.......k..k......k..k..", + "faces": { + "right": "...................................3........333........33c......3333.....333ss.....33333......3333.......33........33........33........33.......k..k......k..k..", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...............1........111........111......1111.....11111.....11111......1111.......11........11........11........11.......1..1......1..1......................", + "door": null + }, + "contentHash": "fnv1a:8a2d5c57" + }, + { + "id": "lg1jnrjy6a3f", + "name": "Sunset Koi", + "category": "dynamic", + "subtype": "fish", + "width": 12, + "height": 8, + "pixels": "........................................d.........ddhhhhdd...dhhMMMhhhR...dhhhhhhdd.....d.d.....", + "faces": { + "right": "........................................d.........ddhhhhdd...dhhMMMhhhR...dhhhhhhdd.....d.d.....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": true, + "particlePixels": [ + { + "x": 2, + "y": 4, + "c": "7", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "7", + "dir": "up" + }, + "depthPixels": "............................1.........11111111...1111111111...111111111.....1.1.................", + "door": null + }, + "contentHash": "fnv1a:ba7fa061" + }, + { + "id": "j3lfyriy6a3l", + "name": "Town Gardener", + "category": "dynamic", + "subtype": "human", + "width": 12, + "height": 16, + "pixels": "................................................................AA.........A55A........5MM5........55o55........oee........oeeee.......oeeee........ooo........oo.oo.......o...o......AA...AA...", + "faces": { + "right": "................................................................AA.........A55A........5MM5........55o55........oee........oeeee.......oeeee........ooo........oo.oo.......o...o......AA...AA...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "................11.........1111........1111........11111........111........11111.......11111........111........11.11.......1...1......11...11...................................................", + "door": null + }, + "contentHash": "fnv1a:5b105e7b" + }, + { + "id": "4jtf6ioy6a3q", + "name": "Lantern Courier", + "category": "dynamic", + "subtype": "human", + "width": 12, + "height": 16, + "pixels": "................................................................AA.........A55A........5MM5........5555.........hhhh.......hhhhh5......hhhh.5.......nnnn.......nn.nn.......n...n......AA...AA...", + "faces": { + "right": "................................................................AA.........A55A........5MM5........5555.........hhhh.......hhhhh5......hhhh.5.......nnnn.......nn.nn.......n...n......AA...AA...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "................11.........1111........1111........1111.........1111.......111111......1111.1.......1111.......11.11.......1...1......11...11...................................................", + "door": null + }, + "contentHash": "fnv1a:25a7719d" + }, + { + "id": "ix1a44vy6a3u", + "name": "Plaza Musician", + "category": "dynamic", + "subtype": "human", + "width": 14, + "height": 16, + "pixels": "...........................................................................AA...........A55A..........5MM5..........5555.........XXXXXX........Xttddd........Xttddd.........dkkd.........dk..kd........A....A.......AA....AA....", + "faces": { + "right": "...........................................................................AA...........A55A..........5MM5..........5555.........XXXXXX........Xttddd........Xttddd.........dkkd.........dk..kd........A....A.......AA....AA....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...................11...........1111..........1111..........1111.........111111........111111........111111.........1111.........11..11........1....1.......11....11............................................................", + "door": null + }, + "contentHash": "fnv1a:0c84b262" + }, + { + "id": "2igldehy6a3z", + "name": "Bridge Mechanic", + "category": "dynamic", + "subtype": "human", + "width": 14, + "height": 16, + "pixels": "...........................................................................AA...........A55A..........5MM5..........5555.........jjjjjj........jjwjjj........jjwjjd.........oooo.........oo.oo.........o...o........AA...AA.....", + "faces": { + "right": "...........................................................................AA...........A55A..........5MM5..........5555.........jjjjjj........jjwjjj........jjwjjd.........oooo.........oo.oo.........o...o........AA...AA.....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...................11...........1111..........1111..........1111.........111111........111111........111111.........1111.........11.11.........1...1........11...11.............................................................", + "door": null + }, + "contentHash": "fnv1a:48ca7020" + }, + { + "id": "ds7gpmty6a4a", + "name": "Harbor Clocktower", + "category": "static", + "subtype": "building", + "width": 32, + "height": 40, + "pixels": ".............................................................................................................................................................................................................................................................................oooooo.........................kkkkkkkk.......................kkkkkkkkkk........................kkkkkk..........................kkkkkk..........................kkkkkk.........................gggggggg........................gggggggg........................gggggggg........................gggggggg........................g444444g........................g400004g........................g400o04g........................g40oo04g........................g400004g........................g444444g........................gggggggg........................gggggggg........................gggggggg........................g55gg55g........................g55gg55g........................g55gg55g........................gggggggg........................gggggggg........................gggggggg........................gg55g55g........................gg55g55g........................gg55g55g........................gggggggg........................gggggggg.......................gggggggggg......................gggggggggg...........", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 15, + "y": 12, + "c": "5" + }, + { + "x": 16, + "y": 12, + "c": "5" + }, + { + "x": 13, + "y": 22, + "c": "5" + }, + { + "x": 18, + "y": 22, + "c": "5" + }, + { + "x": 14, + "y": 28, + "c": "5" + }, + { + "x": 17, + "y": 28, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".............111111.........................11111111.......................1111111111........................111111..........................111111..........................111111.........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111........................11111111.......................1111111111......................1111111111...........................................................................................................................................................................................................................................................................", + "door": { + "x": 15, + "y": 38 + } + }, + "contentHash": "fnv1a:84e7cd5a" + }, + { + "id": "fbd7df9y6a4u", + "name": "Glass Greenhouse", + "category": "static", + "subtype": "building", + "width": 28, + "height": 20, + "pixels": ".............................................................................................................................33.........................OOOO.......................333333.....................OOOOOOOO..............cccccccccccccccccccc........c333c333c333c333c333........c333c333c333c333c333........cccccccccccccccccccc........c333c333c333c3aac333........c333aa331111c3aac333........ccccaacc1111cccccccc........c33eee331111c3eee333........c33eee331111c3eee333........cccccccc1111cccccccc...............kkkkkk......................kkkkkk...........", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 10, + "y": 10, + "c": "1" + }, + { + "x": 13, + "y": 10, + "c": "1" + }, + { + "x": 16, + "y": 10, + "c": "1" + } + ], + "lightColor": "1", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".................................................................................................11.........................1111.......................111111.....................11111111..............11111111111111111111........11111111111111111111........11111111111111111111........11111111111111111111........11111111111111111111........11111111111111111111........11111111111111111111........11111111111111111111........11111111111111111111........11111111111111111111...............111111......................111111.......................................", + "door": { + "x": 13, + "y": 18 + } + }, + "contentHash": "fnv1a:2a1a7c75" + }, + { + "id": "170nhhsy6a5q", + "name": "Steam Workshop", + "category": "static", + "subtype": "building", + "width": 40, + "height": 24, + "pixels": "..................................................kbbk.............kbbbk..................kbbk.............kbbbk..................kbbk.............kbbbk..................kkkk.............kkkkk..................kkkk.............kkkkk..................kkkk....ssssssssskkkkksss...........ooookkkkoooossssssssskkkkksss...........ooookkkkoooossssssssskkkkksss.........kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk........kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk........kkggggggggggkkggggggggggggggggkk........kkggg999gg999kgggggg999gg999ggkk........kkggg999gg999kgggggg999gg999ggkk........kkggg999gg999kgggggg999gg999ggkk........kkggggggggggkkggggggggggggggggkk........kkggggggggggkkwwwwwwggggggggggkk........kkggggggggggkkwwwwwwggggggggggkk........kkggggggggggkkwwwwwwggggggggggkk........kkkkkkkkkkkkkkwwwwwwkkkkkkkkkkkk........kkkkkkkkkkkkkkwwwwwwkkkkkkkkkkkk......oooooooooooooooooooooooooooooooooooo....oooooooooooooooooooooooooooooooooooo....oooooooooooooooooooooooooooooooooooo..", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 13, + "y": 14, + "c": "9" + }, + { + "x": 18, + "y": 14, + "c": "9" + }, + { + "x": 27, + "y": 14, + "c": "9" + }, + { + "x": 32, + "y": 14, + "c": "9" + } + ], + "lightColor": "9", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..........1111.............11111..................1111.............11111..................1111.............11111..................1111.............11111..................1111.............11111..................1111....11111111111111111...........11111111111111111111111111111...........11111111111111111111111111111.........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111........11111111111111111111111111111111......111111111111111111111111111111111111....111111111111111111111111111111111111....111111111111111111111111111111111111..........................................", + "door": { + "x": 20, + "y": 22 + } + }, + "contentHash": "fnv1a:eb5424f2" + }, + { + "id": "k18uukoy6a6o", + "name": "Canal Bridge", + "category": "static", + "subtype": "building", + "width": 48, + "height": 16, + "pixels": "...........................................................................................................................................................................................................................................................................................................88..88..88..88..88..88..88..88.................8...8...8...8...8...8...8...8...................8...8...8...8...8...8...8...8...................8...8...8...8...8...8...8...8.................gg8ggg8ggg8ggg8ggg8ggg8ggg8ggg8g................gg8ggg8ggg8ggg8ggg8ggg8ggg8ggg8g..............ggggggggggggjjjjjjjjjjjjgggggggggggg............ggggggggggjjjjjjjjjjjjjjjjgggggggggg.........ooooooooooooooojjjjjjjjjjjjooooooooooooooo......ooooooooooooooooojjjjjjjjooooooooooooooooo...", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...........................................................................................................................................................................................................11..11..11..11..11..11..11..11.................1...1...1...1...1...1...1...1...................1...1...1...1...1...1...1...1...................1...1...1...1...1...1...1...1.................11111111111111111111111111111111................11111111111111111111111111111111..............111111111111111111111111111111111111............111111111111111111111111111111111111.........111111111111111111111111111111111111111111......111111111111111111111111111111111111111111...................................................................................................", + "door": null + }, + "contentHash": "fnv1a:508d58cb" + }, + { + "id": "sbl2ma4y6a78", + "name": "Grand Fountain", + "category": "static", + "subtype": "building", + "width": 24, + "height": 24, + "pixels": "...........................................................33.....................3333...................3SSSS3...................3SS3...................33SS33.................3SSSSSS3.................3SSSS3................ggg3333ggg.............gOOOggggOOOg...........gOOSSSSSSOOOg..........gOOSSSSSSSSOOOg.........gOSSSS33SSSSOOg.........gOOSSSSSSSSOOOg..........gOOSSSSSSOOOg............gOOOggggOOg..............ggggggggg...............kkkkkkkkk..............kkkggggkkkk............kkggggggggkk...........kkkkkkkkkkkkkk..........kkSSSSSSSSSSkk...........kkkkkkkkkkkk.......", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 11, + "y": 7, + "c": "3" + }, + { + "x": 12, + "y": 7, + "c": "3" + }, + { + "x": 9, + "y": 12, + "c": "3" + }, + { + "x": 14, + "y": 12, + "c": "3" + } + ], + "lightColor": "3", + "hasParticles": true, + "particlePixels": [ + { + "x": 11, + "y": 5, + "c": "3", + "dir": "up" + }, + { + "x": 12, + "y": 5, + "c": "3", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "3", + "dir": "up" + }, + "depthPixels": "...................................11.....................1111...................111111...................1111...................111111.................11111111.................111111................1111111111.............111111111111...........1111111111111..........111111111111111.........111111111111111.........111111111111111..........1111111111111............11111111111..............111111111...............111111111..............11111111111............111111111111...........11111111111111..........11111111111111...........111111111111...............................", + "door": null + }, + "contentHash": "fnv1a:664416a8" + }, + { + "id": "965de5py6a7s", + "name": "Rocket Monument", + "category": "static", + "subtype": "building", + "width": 20, + "height": 32, + "pixels": ".............................hh.................h33h...............h3333h..............h3333h.............hh3bb3hh............h33bb33h............h333333h............h33kk33h............h33kk33h............h333333h...........hh333333hh..........h33333333h..........h33333333h..........h33hh3333h..........h33hh3333h..........h33333333h..........hh333333hh...........h333333h...........hh333333hh.........hhh333333hhh........h3333333333h........h3333333333h........hhhh3333hhhh.........kkk3333kkk..........kk999999kk..........kkdd99ddkk..........kk999999kk..........kkkkkkkkkk...........ooo..ooo...........ooo....ooo..........oo......oo.....", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 9, + "y": 8, + "c": "5" + }, + { + "x": 10, + "y": 8, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": true, + "particlePixels": [ + { + "x": 8, + "y": 27, + "c": "9", + "dir": "up" + }, + { + "x": 11, + "y": 27, + "c": "d", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "9", + "dir": "up" + }, + "depthPixels": ".........11.................1111...............111111..............111111.............11111111............11111111............11111111............11111111............11111111............11111111...........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111...........11111111...........1111111111.........111111111111........111111111111........111111111111........111111111111.........1111111111..........1111111111..........1111111111..........1111111111..........1111111111...........111..111...........111....111..........11......11.........................", + "door": { + "x": 9, + "y": 30 + } + }, + "contentHash": "fnv1a:bed0e859" + }, + { + "id": "j2lv8uvy6a8c", + "name": "Arcade Booth", + "category": "static", + "subtype": "building", + "width": 24, + "height": 20, + "pixels": "....................................................................................................XXXXXXXXXXXXXXXX........XXXXXXNXXQXXOXXX.......sXXXXXXXXXXXXXXXXs......ssssssssssssssssss......ssszzzzzzzzzzzzsss......ssszWWWWWWWWWWzsss......ssszWWWWWWWWWWzsss......ssszWWWWWWWWWWzsss......ssszWWWWWWWWWWzsss......ssszzzzzzzzzzzzsss......ssssssssssssssssss......sssssswwwwwwssssss......sssssswwwwwwssssss...........oooooooo................oooooooo..........wwwwwwwwwwwwwwwwwwww..", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 7, + "y": 10, + "c": "b" + }, + { + "x": 16, + "y": 10, + "c": "b" + }, + { + "x": 11, + "y": 6, + "c": "b" + } + ], + "lightColor": "b", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "............................................................................1111111111111111........1111111111111111.......111111111111111111......111111111111111111......111111111111111111......111111111111111111......111111111111111111......111111111111111111......111111111111111111......111111111111111111......111111111111111111......111111111111111111......111111111111111111...........11111111................11111111..........11111111111111111111..........................", + "door": { + "x": 11, + "y": 18 + } + }, + "contentHash": "fnv1a:7553c015" + }, + { + "id": "qamstg6y6a8u", + "name": "Chess Knight Statue", + "category": "static", + "subtype": "building", + "width": 16, + "height": 24, + "pixels": "......................................88.............8008...........800008..........800f008.........8000088........80000008........80080008........80088008.........800008..........800008.........88000088.......8880000888......8000000008......8888008888........kk00kk.........kkk00kkk.......kkkkkkkkkk......kkkggggkkk......kkggggggkk.....kkkkkkkkkkkk....kffffffffffk.....kkkkkkkkkk....", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 7, + "y": 8, + "c": "3" + }, + { + "x": 8, + "y": 8, + "c": "3" + } + ], + "lightColor": "3", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "......................11.............1111...........111111..........1111111.........1111111........11111111........11111111........11111111.........111111..........111111.........11111111.......1111111111......1111111111......1111111111........111111.........11111111.......1111111111......1111111111......1111111111.....111111111111....111111111111.....1111111111....................", + "door": null + }, + "contentHash": "fnv1a:04de304a" + }, + { + "id": "cthsuy3y6a9h", + "name": "Desert Train", + "category": "static", + "subtype": "building", + "width": 44, + "height": 16, + "pixels": "................................................................................................33........................................77..........................................77.........................................kkkk...kkkkkkkkkk...kkkkkkkkkk..............kkkk...kkkkkkkkkk...kkkkkkkkkk..............kk55..hhhhhhhhhhhhhhhhhhhhhhhhhh...........kkk55kkhh999hh999hhhhhh999hh999hhkkkkk......kkkkkkkhh999hh999hhhhhh999hh999hhkkkkk......kkkkkkkhhhhhhhhhhhhhhhhhhhhhhhhhhkkkkk......kkAkkkkhhhhAhhhhhAhhhhhhhAhhhhhAhkkkAk.......AAA...oooAAAoooAAAoooooAAAoooAAA..AAA......AAgAA....AAgAA.AAgAA...AAgAA.AAgAAAAgAA...gggggggggggggggggggggggggggggggggggggggg..oooooooooooooooooooooooooooooooooooooooooooo", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 7, + "y": 7, + "c": "9" + }, + { + "x": 13, + "y": 8, + "c": "9" + }, + { + "x": 19, + "y": 8, + "c": "9" + }, + { + "x": 28, + "y": 8, + "c": "9" + }, + { + "x": 35, + "y": 8, + "c": "9" + } + ], + "lightColor": "9", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "................................................................................................11........................................11..........................................11.........................................1111...1111111111...1111111111..............1111...1111111111...1111111111..............1111..11111111111111111111111111...........11111111111111111111111111111111111111......11111111111111111111111111111111111111......11111111111111111111111111111111111111......11111111111111111111111111111111111111.......111...11111111111111111111111111..111......11111....11111.11111...11111.1111111111...1111111111111111111111111111111111111111..11111111111111111111111111111111111111111111", + "door": null + }, + "contentHash": "fnv1a:8604fff2" + }, + { + "id": "zl4ia2fy6a9y", + "name": "Tea Robot", + "category": "dynamic", + "subtype": "human", + "width": 12, + "height": 16, + "pixels": ".................................................................bb.........b33b........b3s3b.......b333b........ddd........dkkkd.......dkOkdO.......dkkd.......g.ggg......gg..gg......s....s...", + "faces": { + "right": ".................................................................bb.........b33b........b3s3b.......b333b........ddd........dkkkd.......dkOkdO.......dkkd.......g.ggg......gg..gg......s....s...", + "left": "mirror" + }, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 8, + "y": 8, + "c": "O" + } + ], + "lightColor": "O", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".................11.........1111........11111.......11111........111........11111.......111111.......1111.......1.111......11..11......1....1...................................................", + "door": null + }, + "contentHash": "fnv1a:e65ea2ff" + }, + { + "id": "bomdmjgy6aa2", + "name": "Balloon Vendor", + "category": "dynamic", + "subtype": "human", + "width": 14, + "height": 18, + "pixels": "..........................................................Q..N..b.......Q..N..b.......QQ.NN.bb.........k.............A............AkkA..........kMMk..........kkkk.........hhhhhh........hhhhhh.........bb.bb........bb...b........A....A.......AA....AA....", + "faces": { + "right": "..........................................................Q..N..b.......Q..N..b.......QQ.NN.bb.........k.............A............AkkA..........kMMk..........kkkk.........hhhhhh........hhhhhh.........bb.bb........bb...b........A....A.......AA....AA....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..1..1..1.......1..1..1.......11.11.11.........1.............1............1111..........1111..........1111.........111111........111111.........11.11........11...1........1....1.......11....11............................................................", + "door": null + }, + "contentHash": "fnv1a:d3a90d8d" + }, + { + "id": "tfwksj6y6aa6", + "name": "Jelly Comet", + "category": "dynamic", + "subtype": "animal", + "width": 12, + "height": 12, + "pixels": "..........................................b.........bbbbb.....bb33333bb...b33nnn33b...b3333333b....b33333b......bbbbb........7.7........7...7...", + "faces": { + "right": "..........................................b.........bbbbb.....bb33333bb...b33nnn33b...b3333333b....b33333b......bbbbb........7.7........7...7...", + "left": "mirror" + }, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 7, + "y": 4, + "c": "7" + } + ], + "lightColor": "7", + "hasParticles": true, + "particlePixels": [ + { + "x": 2, + "y": 6, + "c": "3", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "3", + "dir": "up" + }, + "depthPixels": "..................1.........11111.....111111111...111111111...111111111....1111111......11111........1.1........1...1...........................", + "door": null + }, + "contentHash": "fnv1a:4b26e093" + }, + { + "id": "p3gxv6py6aaa", + "name": "Courier Bike", + "category": "dynamic", + "subtype": "human", + "width": 16, + "height": 12, + "pixels": "......................AA.............A55A............5MM5............5555...........WWWWWW..........Wooo.W..........W.oooW...........s.s...........44...44........44M4444M4........44...44......", + "faces": { + "right": "......................AA.............A55A............5MM5............5555...........WWWWWW..........Wooo.W..........W.oooW...........s.s...........44...44........44M4444M4........44...44......", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "......................11.............1111............1111............1111...........111111..........1111.1..........1.1111...........1.1...........11...11........111111111........11...11......", + "door": null + }, + "contentHash": "fnv1a:01dfc817" + }, + { + "id": "x451owfy6aad", + "name": "Great Cedar", + "category": "static", + "subtype": "nature", + "width": 24, + "height": 32, + "pixels": "..................................iiii..................iieeeeii..............iieee66eeii............ieee6666eeeii..........ieee66ii66eeei.........ieee66iiii66eeei........iee66iiiiii66eei.......iee66iimmmmii66eei......iee6iimmmmmmii6eei.....iee66immiiiimmi66eei....iee6iimiiiiiimii6eei....ie66iiiiiiiiiiii66ei....ie6iiiiiiiiiiiiii6ei...ie66iiiiiiiiiiiiii66ei..ie6iiiiiiiiiiiiiiii6ei..ie6iiiiiiiiiiiiiiii6ei...ie6iiiiiiiiiiiiii6ei....ie66iiiiiiiiiiii66ei....iee6iiiiiiiiiiii6eei....iee66iiiiiiiiii66eei.....iee6iiiiiiiiii6eei......iee66iiiiiiii66eei.......iee66iiiiii66eei.........ieee66ii66eeei...........ieee6666eeei.............ieeeppeeei...............ieeppeei................pppppppp...............pppppppppp..............ppppddpppp.............tttttttttttt.......", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..........1111..................11111111..............11111111111............11111111111111.........111111111111111........11111111111111111.......11111111111111111......1111111111111111111.....1111111111111111111....111111111111111111111...111111111111111111111...111111111111111111111...111111111111111111111..11111111111111111111111.11111111111111111111111.11111111111111111111111..111111111111111111111...111111111111111111111...111111111111111111111...111111111111111111111....1111111111111111111.....1111111111111111111......11111111111111111........111111111111111..........1111111111111............1111----111..............111----11...............--------...............----------..............----------.............------------...............................", + "door": null + }, + "contentHash": "fnv1a:47b0b007" + }, + { + "id": "1rmrha4y6aaw", + "name": "Moonfall Cascade", + "category": "static", + "subtype": "nature", + "width": 24, + "height": 32, + "pixels": "..............................iiiiiiiiiiii..........iiggggggggggggii.......iggg77333377ggggi......igg773333333377gggi.....ig73333SSSS33337gi.....ig7333SSSSSSSS337gi.....ig333SSSffffSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSSf33fSSS33gi.....ig333SSS3333SSS33gi.....ig333333333333333gi......ig3333773377333gi.......ig3337733337733gi........ig33333333333gi..........ig3333333333gi..........ii3333333333ii...........33ffffffff33...........33ffffffffff33..........3ffffffffffff3..........33333333333333..........SSSSSSSSSSSSSS......", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": true, + "particlePixels": [ + { + "x": 9, + "y": 20, + "c": "3", + "dir": "up" + }, + { + "x": 14, + "y": 20, + "c": "3", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "3", + "dir": "up" + }, + "depthPixels": "......111111111111..........1111111111111111.......11111111111111111......1111111111111111111.....1111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....1111111----1111111.......111111----111111........111111----111111.........11111----11111...........1111----1111............1111----1111.............------------...........--------------..........--------------..........--------------..........--------------..............................", + "door": null + }, + "contentHash": "fnv1a:836a9d7d" + }, + { + "id": "omsnif2y6abh", + "name": "Sunblossom Gate", + "category": "static", + "subtype": "nature", + "width": 24, + "height": 24, + "pixels": "................................NNNN..................NNVVVVNN...............NVVVeeVVVN.............NVVVeeeeVVVN...........NNVVee11eeVVNN.........NNVVee1111eeVVNN........NVVVe111111eVVVN.......NVVVe11....11eVVVN......NVVVe1......1eVVVN......NVVVe1......1eVVVN......NVVVe1......1eVVVN......NVVVe1......1eVVVN......NVVVe1......1eVVVN......NVVVe1......1eVVVN.......NVVVee....eeVVVN........NNVVVeeeeeeVVNN..........NNVVkkkkkkVNN............kkkkooookkk.............kkkkooookkk.............kkkkooookkk.............kkkkkkkkkkk..............eeeeeeee................eeeeeeee...........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........1111..................11111111...............1111111111.............111111111111...........11111111111111.........1111111111111111........1111111111111111.......1111111....1111111......111111......111111......111111......111111......111111......111111......111111......111111......111111......111111......111111......111111.......111111....111111........1111111111111111.........11111------111...........----1111----............----1111----............----1111----............-------------............--------................--------...................................", + "door": null + }, + "contentHash": "fnv1a:b728a136" + }, + { + "id": "kd1fy1my6abs", + "name": "Echo Cavern", + "category": "static", + "subtype": "nature", + "width": 32, + "height": 20, + "pixels": "..........................................gggggggggg...................ggggiiiiiiiigggg..............ggiiiiiAAAAiiiiiigg............giiiiAAAAAAAAAAiiiig...........giiiAAAAAAAAAAAAAAiiig.........giiAAAAAAAA..AAAAAAAAiig.......giiAAAAAA......AAAAAAAiig.......giAAAAA..........AAAAAAig.......giAAAA............AAAAAig.......giAAA..............AAAAig.......giAAA..............AAAAig.......giAAAA............AAAAAig.......giAAAAA..........AAAAAAig.......giiAAAAAA......AAAAAAAiig........giiAAAAAAAA..AAAAAAAAiig.........giiiAAAAAAAAAAAAAAiiig...........giiiiAAAAAAAAAAiiiig.............ggiiiiiAAAAiiiiigg...............oooooooooooooooo..........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..........................................1111111111...................1111111111111111..............11111111111111111111...........111111111111111111111..........11111111111111111111111........111111111111..1111111111.......1111111111......111111111.......11111111..........11111111......1111111............1111111......111111..............111111......111111..............111111......1111111............1111111......11111111..........11111111......1111111111......111111111........111111111111..1111111111.........11111111111111111111111..........111111111111111111111............1111111111111111111..............----------------..........", + "door": null + }, + "contentHash": "fnv1a:fb73fb21" + }, + { + "id": "shtpgwfy6ac5", + "name": "Worldroot Shrine", + "category": "static", + "subtype": "nature", + "width": 28, + "height": 28, + "pixels": "............iiii......................iieeeeii..................iieee66eeeii...............ieee666666eeei.............iee66iiiiii66eei...........iee6iiiiiiiiii6eei.........iee6iiiikkiiiiii6eei........iee6iiikkkkiiiii6eei.......iee6iikkkkkkkkiii6eei.......iee6iikkkoookkkii6eei......iee6iikkkoo66ookkii6eei.....iee6iikkoo6666ookii6eei.....iee6iikkoo6556ookii6eei.....iee6iikkoo5555ookii6eei.....iee6iikkoo6556ookii6eei.....iee6iikkoo6666ookii6eei.....iee6iikkkoo66ookkii6eei......iee6iikkkoookkkii6eei.......iee6iikkkkkkkkiii6eei........iee6iiikkkkiiiii6eei........iee6iiiikkiiiiii6eei.........iee6iiiiiiiiii6eei...........iee66iiiiii66eei.............ieee66kk66eeei...............ieeekkkkeeii.................kkkkkkkkkk.................kkkkcckkkkkk...............oooooooooooooo.......", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 13, + "y": 12, + "c": "5" + }, + { + "x": 14, + "y": 12, + "c": "5" + }, + { + "x": 12, + "y": 13, + "c": "5" + }, + { + "x": 15, + "y": 13, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "............1111......................11111111..................111111111111...............11111111111111.............1111111111111111...........111111111111111111.........11111111111111111111........11111111111111111111.......1111111111111111111111......1111111111111111111111.....111111111111111111111111....111111111111111111111111....111111111111111111111111....111111111111111111111111....111111111111111111111111....111111111111111111111111....111111111111111111111111.....1111111111111111111111......1111111111111111111111.......11111111111111111111........11111111111111111111.........111111111111111111...........1111111111111111.............11111111111111...............1111----1111.................----------.................------------...............----------------.....", + "door": null + }, + "contentHash": "fnv1a:4a077f44" + }, + { + "id": "kmjtd3ly6acp", + "name": "Moon Jelly Aquarium", + "category": "static", + "subtype": "building", + "width": 24, + "height": 28, + "pixels": "...................................55.....................5005...................5A00A5.................ATSSSSTA...............ATSOOOOSTA.............ATSOO00OOSTA............ASOOOOOOOOSA...........ATSOOQQQQOOSTA..........ASOOQQ55QQOOSA.........ATSOOQ5555QQOOSTA.......ASOOQ555555QQOOSA.......ASOOQ555555QQOOSA......ATSOOQ555555QQOOSTA.....A.SOOQTTTTTTQQOOS.A.....A.A55TAAAAAAT55A.A......A.kg5T5....5T5gk.A.......Akkg5......5gkkA........Aggg5......5gggA........Aggg5..ww..5gggA........Aggg5.wwww.5gggA........Aggg55555555gggA........AgggkkkkkkkkgggA........AkkkkgwwwwgkkkkA.........Akkkgw...wgkkkA.........Awwwgg...ggwwwA..........AwwwwAAAwwwwA............AAAAAAAAAAA......", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 10, + "y": 10, + "c": "5" + }, + { + "x": 13, + "y": 10, + "c": "5" + }, + { + "x": 11, + "y": 20, + "c": "5" + }, + { + "x": 12, + "y": 20, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...........11.....................1111...................111111.................11111111...............1111111111.............111111111111............111111111111...........111111..111111..........11111....11111.........111111....111111........111111....111111........111111....111111.......1111111....1111111......111111......111111......11..11......11..11......11..11......11..11.......11..1......1..11........11..1......1..11........11111..--..11111........11111.----.11111........1111111111111111........11111------11111........11111------11111.........1111------1111..........11111....11111...........11111..11111.............1111111111...............................", + "door": { + "x": 11, + "y": 24 + } + }, + "contentHash": "fnv1a:2ce3fef7" + }, + { + "id": "uzvrmc4y6adk", + "name": "Aurora Observatory", + "category": "static", + "subtype": "building", + "width": 28, + "height": 28, + "pixels": "........................................AAAA......................AAXXXXAA...................AXX7777XXA.................AXX777777XXA...............AXX77bbbb77XXA.............AXX7bbbbbbbb7XXA............AXXbbbbbbbbbbXXA...........AXXbbbbbbbbbbbbXXA..........AXXbbbbbbbbbbbbXXA..........AXXXXXXXXXXXXXXXXA.........AAkkkkkkAAkkkkkkkkAA........AkkkkkkA..AkkkkkkkkA.......AAkkk11kAAAAkk11kkkAA.......Akkk1111kkkk1111kkkkA.......Akk111111kk111111kkkA.......Akk11ww11kk11ww11kkkA.......Akk111111kk111111kkkA.......AkkkkkkkkkkkkkkkkkkkA.......AkkcccccccccccccckkkA.......AkkckkkcckkkkcckkckkA.......AkkckkkcckkkkcckkckkA.......AkkcccccccccccccckkkA.......AkkcckkkcccccckkckkkA.......AkkcckkkccwwcckkckkkA.......AkkccccccwwcccccckkkA........AkkkkkkkkwwkkkkkkkA.........AAAAAAAAAAAAAAAAAA......", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 13, + "y": 2, + "c": "3" + }, + { + "x": 14, + "y": 2, + "c": "3" + }, + { + "x": 9, + "y": 13, + "c": "3" + }, + { + "x": 18, + "y": 13, + "c": "3" + }, + { + "x": 13, + "y": 23, + "c": "3" + } + ], + "lightColor": "3", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "............1111......................11111111...................1111111111.................111111111111...............11111111111111.............1111111111111111............1111111111111111...........111111111111111111..........111111111111111111..........111111111111111111.........11111111111111111111........11111111..1111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111.......111111111111111111111........1111111111111111111.........111111111111111111..................................", + "door": { + "x": 13, + "y": 24 + } + }, + "contentHash": "fnv1a:6316cef7" + }, + { + "id": "h82at0uy6ael", + "name": "Hearthwind Mill", + "category": "static", + "subtype": "building", + "width": 24, + "height": 28, + "pixels": "..................................AAAA...................A1111A..................A1bb1A.................A11bb11A................AAAbbAAA...............A..AbbA..A..........AAAAA..AbbA..AAAAA.....AkkkkAAAAbbAAAAkkkkA....AkkkkkkAAbbAAkkkkkkA....AkkkkkkkAAAAkkkkkkkA....AkkkkkkkkkkkkkkkkkkA....AccccccccccccccccccA....AccccccccccccccccccA....Acc55cccccccccc55ccA....Ac5555cccAAcc5555ccA....Acc55ccccAAcccc55ccA....Accccc888888cccccccA....Acc888kk888888kk8ccA....Acc8kkkk88ww88kkk8cA....Acc8kkkk88ww88kkk8cA....Acc8888888ww888888cA....Accc888888ww8888cccA....AcccccccccwwcccccccA....AcccccccccwwcccccccA....AcccccccccwwcccccccA....AcccccccAAAAcccccccA.....AAAAAAAA..AAAAAAAA...", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 8, + "y": 13, + "c": "5" + }, + { + "x": 15, + "y": 13, + "c": "5" + }, + { + "x": 11, + "y": 18, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..........1111...................111111..................111111.................11111111................11111111...............1..1111..1..........11111..1111..11111.....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111.....11111111..11111111...........................", + "door": { + "x": 11, + "y": 22 + } + }, + "contentHash": "fnv1a:3c976c7b" + }, + { + "id": "adu51aey6afj", + "name": "Tideglass Lighthouse", + "category": "static", + "subtype": "building", + "width": 20, + "height": 36, + "pixels": "........AAAA...............A5555A..............A5335A.............A553355A............AAA33AAA.............A.33.A..............A.bb.A.............AA.bb.AA............AMMMMMMA............AMM11MMA...........AAMM11MMAA..........AMMMMMMMMA..........AMM8888MMA..........AMM8kk8MMA..........AMM8888MMA.........AAMMMMMMMMAA........AMMMM11MMMMA........AMMMM11MMMMA........AMMMMMMMMMMA........AMMM8888MMMA........AMMM8kk8MMMA........AMMM8888MMMA.......AAMMMMMMMMMMAA......AMMMMMMMMMMMMA......AMMM88MM88MMMA......AMMMkkMMkkMMMA......AMMM88MM88MMMA.....AAMMMMMMMMMMMMAA....AMMMMMMMMMMMMMMA....AMMMMMMwwMMMMMMA....AMMMMMMwwMMMMMMA....AMMMM88ww88MMMMA....AMMMMkkwwkkMMMMA....AMMMM88ww88MMMMA.....AAAAAAwwAAAAAA...........AAAA........", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 8, + "y": 2, + "c": "1" + }, + { + "x": 9, + "y": 2, + "c": "1" + }, + { + "x": 8, + "y": 16, + "c": "1" + } + ], + "lightColor": "1", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........1111...............111111..............111111.............11111111............11111111.............1.11.1..............1.11.1.............11.11.11............11111111............11111111...........1111111111..........1111111111..........1111111111..........1111111111..........1111111111.........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111.......11111111111111......11111111111111......11111111111111......11111111111111......11111111111111.....1111111111111111....1111111111111111....1111111111111111....1111111111111111....1111111111111111....1111111111111111....1111111111111111.....11111111111111...........1111........", + "door": { + "x": 8, + "y": 33 + } + }, + "contentHash": "fnv1a:a36dc353" + }, + { + "id": "yz6h7yry6agj", + "name": "Mossrail Depot", + "category": "static", + "subtype": "building", + "width": 32, + "height": 20, + "pixels": "....................................AAAAAAAAAAAAAAAAAAAAAAAA.......A555555555555555555555555A.....A55AAAAAAAAAAAAAAAAAAAAAA55A....A55AkkkkkkkkkkkkkkkkkkkkA55A....A55AkkkkkkkkkkkkkkkkkkkkA55A....A55AAAAAAAAAAAAAAAAAAAAAA55A...AA88888888888888888888888888AA..A8888888888888888888888888888A..A885555888855558888555588888A...A885555888855558888555588888A...A888888888888888888888888888A...A88cccccccccccccccccccccc888A...A88ckkkcccccccccccccckkkc888A...A88cccccccccAAAAccccccccc888A...A88ckkkcccccAwwAccccckkkc888A...A88cccccccccAwwAccccccccc888A...A888888888888ww8888888888888A...A888888888888ww8888888888888A...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 6, + "y": 8, + "c": "5" + }, + { + "x": 13, + "y": 8, + "c": "5" + }, + { + "x": 20, + "y": 8, + "c": "5" + }, + { + "x": 26, + "y": 8, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "....111111111111111111111111.......11111111111111111111111111.....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111...111111111111111111111111111111..111111111111111111111111111111..11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111...111111111111111111111111111111.................................", + "door": { + "x": 15, + "y": 16 + } + }, + "contentHash": "fnv1a:b930d92b" + }, + { + "id": "rc1vh22y6ahk", + "name": "Lantern Library", + "category": "static", + "subtype": "building", + "width": 28, + "height": 24, + "pixels": "...............................................................AAAAAAAAAAAAAA.............A99999999999999A...........A99AAAAAAAAAAAA99A..........A9AooooooooooooA9A.........AAAAAAAAAAAAAAAAAAAA........AkkkkkkkkkkkkkkkkkkA.......AAkkk111kkAAkk111kkkAA......Akkk1111kkkkkk1111kkkA......Akkkk11kkkkkkkk11kkkkA......AkkkkkkkkkkkkkkkkkkkkA......Akk8888888888888888kkA......Akk8ooo88oo88oo88oo8kA......Akk8888888888888888kkA......Akk8ooo88oo88oo88oo8kA......Akk8888888888888888kkA......Akk88oo88888888oo88kkA......Akk88oo888AAw88oo88kkA......Akk8888888AAw888888kkA......AkkkkkkkkkkwwkkkkkkkkA......AkkkkkkkkkkwwkkkkkkkkA.......AkkkkkkkkAAAAkkkkkkA........AAAAAAAAA....AAAAAA.....", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 8, + "y": 7, + "c": "5" + }, + { + "x": 19, + "y": 7, + "c": "5" + }, + { + "x": 13, + "y": 16, + "c": "5" + }, + { + "x": 14, + "y": 16, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......11111111111111.............1111111111111111...........111111111111111111..........111111111111111111.........11111111111111111111........11111111111111111111.......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111......1111111111111111111111.......11111111111111111111........111111111....111111.............................................................", + "door": { + "x": 13, + "y": 18 + } + }, + "contentHash": "fnv1a:ae675812" + }, + { + "id": "zzcxm83y6aij", + "name": "Velvet Theater", + "category": "static", + "subtype": "building", + "width": 28, + "height": 20, + "pixels": "............................................................AAAAAAAAAAAAAAAAAAAA.......A99999999999999999999A.....A99AAAAAAAAAAAAAAAAAA99A....A9AppppppppppppppppppA9A...AAAAAAAAAAAAAAAAAAAAAAAAAA..AooooooooooooooooooooooooA..Aoo55555555oooo55555555ooA..Aoo5QQQQQ55oooo55QQQQQ5ooA..Aoo55555555oooo55555555ooA..AooooooooooooooooooooooooA..AooccccccccccccccccccccooA..AoocooccooccccccooccoocooA..AoocccccccccAAcccccccccooA..AoocooccooccAAAAccooccocooA.AoocccccccccAAAAccccccccooA.AoooooooooooAAAooooooooooA..AooooooooooAAAAAoooooooooA..AAAAAAAAAAAAAAAAAAAAAAAAAA.", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 13, + "y": 14, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "....11111111111111111111.......1111111111111111111111.....111111111111111111111111....111111111111111111111111...11111111111111111111111111..11111111111111111111111111..11111111111111111111111111..11111111111111111111111111..11111111111111111111111111..11111111111111111111111111..11111111111111111111111111..11111111111111111111111111..11111111111111111111111111..111111111111111111111111111.111111111111111111111111111.11111111111111111111111111..11111111111111111111111111..11111111111111111111111111.........................................................", + "door": { + "x": 13, + "y": 16 + } + }, + "contentHash": "fnv1a:835a5a33" + }, + { + "id": "5n309pry6ajd", + "name": "Bloom Bridge Gate", + "category": "static", + "subtype": "nature", + "width": 24, + "height": 24, + "pixels": "..........AAAA..................AA9999AA...............A99QQQQ99A.............A99Q9999Q99A...........A99Q99AA99Q99A.........AA9999A..A9999AA.......AAkkkkkA..AkkkkkAA.....AAkkkAAkkAAkkAAkkkAA....AkkkA..AkkkkA..AkkkA....AkkA....AkkA....AkkA....AkkA....AkkA....AkkA....AkkA....AkkA....AkkA....AkkAAAAAAkkAAAAAAkkA....AkkaaaaaakkaaaaaakkA....AkkaiiiaakkaaiiiakkA....AkkaaaaaakkaaaaaakkA....AkkQQQQQQkkQQQQQQkkA....AkkQQ99QQkkQQ99QQkkA....AkkQQQQQQkkQQQQQQkkA.....AAkkkkkkkkkkkkkkAA.......AAAAAAkkAAAAAAAA............AAkkAA..................AkkkkA..................AAAAAA..........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": true, + "particlePixels": [ + { + "x": 7, + "y": 2, + "c": "P", + "dir": "up" + }, + { + "x": 16, + "y": 2, + "c": "P", + "dir": "up" + } + ], + "particleConfig": { + "enabled": true, + "c": "P", + "dir": "up" + }, + "depthPixels": "..........1111..................11111111...............1111111111.............111111111111...........11111111111111.........1111111..1111111.......11111111..11111111.....11111111111111111111....11111..111111..11111....1111....1111....1111....1111....1111....1111....1111....1111....1111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111.....111111111111111111.......1111111111111111............111111..................111111..................111111..........", + "door": null + }, + "contentHash": "fnv1a:27609372" + }, + { + "id": "dlz3yc3y6ak1", + "name": "Starreef Submarine", + "category": "static", + "subtype": "ship", + "width": 32, + "height": 16, + "pixels": ".............................................................................................................AAAAAA.......................AAA999999AAA..................AA997777777799AA..............AA9977WWWWWWWW7799AA...........A9977WWWWWWWWWWWW7799A.........A997WWWWWAAAAWWWWWW799A........A997WWWWWA3333AWWWWW799A.......AA99WWWWWWA3bb3AWWWWWW99AA.....AA999999999A3333A999999999AA....AkkkkkkkkkkAAAAAAkkkkkkkkkkkA...Akkkk11kkkkkkkkkkkk11kkkkkkkA...AAkkkkkkkkkkkkkkkkkkkkkkkkkAA....AAAAAAAAAAAAAAAAAAAAAAAAAA....", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 15, + "y": 7, + "c": "7" + }, + { + "x": 20, + "y": 7, + "c": "7" + } + ], + "lightColor": "7", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".............................................111111.......................111111111111..................1111111111111111..............11111111111111111111...........1111111111111111111111.........11111111111111111111111........111111111111111111111111.......11111111111111111111111111.....1111111111111111111111111111....11111111111111111111111111111...11111111111111111111111111111...11111111111111111111111111111....11111111111111111111111111....................................................................", + "door": null + }, + "contentHash": "fnv1a:0d858047" + }, + { + "id": "3na95zgy6akh", + "name": "Astrolabe Courier", + "category": "dynamic", + "subtype": "human", + "width": 12, + "height": 16, + "pixels": "....AAAA.......AccccA......AccccA......AAAAAA.....AAnnnnAA....Ann33nnA....Annn3nnA.....AnnnnA.....AAnnnnAA...AAnnAAnnAA..AnnA..AnnA..AnnAAAAnnA..AnnnggnnnA..AnnAggAnnA...AAA..AAA.....A....A...", + "faces": { + "right": "....AAAA.......AccccA......AccccA......AAAAAA.....AAnnnnAA....Ann33nnA....Annn3nnA.....AnnnnA.....AAnnnnAA...AAnnAAnnAA..AnnA..AnnA..AnnAAAAnnA..AnnnggnnnA..AnnAggAnnA...AAA..AAA.....A....A...", + "left": "mirror" + }, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 6, + "y": 5, + "c": "3" + } + ], + "lightColor": "3", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "....1111.......111111......111111......111111.....11111111....11111111....11111111.....111111.....11111111...1111111111..1111..1111..1111111111..1111111111..1111111111...111..111.....1....1...", + "door": null + }, + "contentHash": "fnv1a:0e69132c" + }, + { + "id": "has1j9ty6ako", + "name": "Puddle Toad", + "category": "dynamic", + "subtype": "animal", + "width": 12, + "height": 10, + "pixels": "...........................AA..AA.....AeeAAeeA...AeeeeeeeeA..AeeAeeAeeA..AeeeeeeeeA..A33eeee33A...A333333A.....AAAAAA...", + "faces": { + "right": "...........................AA..AA.....AeeAAeeA...AeeeeeeeeA..AeeAeeAeeA..AeeeeeeeeA..A33eeee33A...A333333A.....AAAAAA...", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...............11..11.....11111111...1111111111..1111111111..1111111111..1111111111...11111111.....111111...............", + "door": null + }, + "contentHash": "fnv1a:b7d83351" + }, + { + "id": "cvcojfvy6aku", + "name": "Ribbon Swan", + "category": "dynamic", + "subtype": "bird", + "width": 12, + "height": 12, + "pixels": "..............................AA.........A44A.......A4444A.....A44AA44A..AAA44AA44A.A333344444A.A33333333AA..A3333333A....A33333A......AAAAA....", + "faces": { + "right": "..............................AA.........A44A.......A4444A.....A44AA44A..AAA44AA44A.A333344444A.A33333333AA..A3333333A....A33333A......AAAAA....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "..................11.........1111.......111111.....11111111..1111111111.11111111111.11111111111..111111111....1111111......11111................", + "door": null + }, + "contentHash": "fnv1a:679a02b3" + }, + { + "id": "fjxfboey6al0", + "name": "Lantern Beetle", + "category": "dynamic", + "subtype": "animal", + "width": 12, + "height": 12, + "pixels": "............................AAAA.......ANNNNA.....ANN11NNA....ANN11NNA...AANNAANNAA..AppNNNNppA...AppppppA....ApA..ApA...AAA....AAA..A........A.", + "faces": { + "right": "............................AAAA.......ANNNNA.....ANN11NNA....ANN11NNA...AANNAANNAA..AppNNNNppA...AppppppA....ApA..ApA...AAA....AAA..A........A.", + "left": "mirror" + }, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 5, + "y": 3, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "................1111.......111111.....11111111....11111111...1111111111..1111111111...11111111....111..111...111....111..1........1.............", + "door": null + }, + "contentHash": "fnv1a:4dc817f4" + }, + { + "id": "dvrle37y6alj", + "name": "Smile Portrait", + "category": "static", + "subtype": "building", + "width": 24, + "height": 32, + "pixels": "......................................................llllllllllll...........lAAAAAAAAAAAAl.........lAkkkkkkkkkkkkAl........lAkttttttttttkAl........lAktttcccctttkAl........lAkttccccccttkAl........lAkttccccccttkAl........lAkttcAAActttkAl........lAkttccccccttkAl........lAktttcooccttkAl........lAkoooccccoookAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkoossoooosokAl........lAkossssoossskAl........lAkossssoossskAl........lAkoosssoossokAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkooooooooookAl........lAkkkkkkkkkkkkAl........lAAAAAAAAAAAAAAl.........llllllllllllll.....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "......111111111111...........11111111111111.........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111........1111111111111111.........11111111111111.....................................................", + "door": null + }, + "contentHash": "fnv1a:fb140a94" + }, + { + "id": "6yh56c9y6amq", + "name": "Great Wave Panel", + "category": "static", + "subtype": "nature", + "width": 32, + "height": 24, + "pixels": "....llllllllllllllllllllllll.......lAAAAAAAAAAAAAAAAAAAAAAAAl.....lA777777777777777777777777Al....lA7ffffffffffffffffff77777Al....lA7fffffffffffffffff777777Al....lA7ffffffffffffff777779977Al....lA7ffffffffffff777777777kkAl....lA7ffffffffff777770007777kAl....lA7ffffffff77777000000777kAl....lA7ffffff77777000fff00077kAl....lA7ffff77777000ffffff0077kAl....lA7fff7770007fffffffff077kAl....lA77f7700007fffffffffff77kAl....lA777000007fffffffffffff7kAl....lA77000007ffffffffffffffkAl.....lA77000077ffffffffffffffkAl.....lA77700777ffffffffffffffkAl.....lA77777777ffffffffffffffkAl.....lA77kkkkk77777kkkkkkk777kAl.....lA77kkkkkkk77kkkkkkkk777kAl.....lA77kkkkkkkkkkkkkkkkk777kAl.....lA77kkkkkkkkkkkkkkkkk777kAl.....lA77777777777777777777777Al.....lAAAAAAAAAAAAAAAAAAAAAAAAAl...", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "....111111111111111111111111.......11111111111111111111111111.....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....1111111111111111111111111111....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111.....111111111111111111111111111...", + "door": null + }, + "contentHash": "fnv1a:70c41074" + }, + { + "id": "gpvjlwqy6ano", + "name": "Sunflower Still Life", + "category": "static", + "subtype": "nature", + "width": 24, + "height": 32, + "pixels": "................................................................................AA..AA.................ANNAANNA...............ANNNNNNNNA...............ANNAANNA.................AA..AA....................kk.................AA..AA..AA..AA.........ANNAANNAANNAANNA.......ANNNNNNNNNNNNNNNNA.......ANNAANNAANNAANNA.........AA..AA..AA..AA................kk.................AA..AA..AA.............ANNAANNAANNA...........ANNNNNNNNNNNNA...........ANNAANNAANNA.............AA..AA..AA................kkkk....................kkkk...................AggggggA...............AggggggggA..............AggggggggA..............AggggggggA...............AggggggA.................AggggA..................AggggA.................AkkkkkkA...............AkkkkkkkkA..............AAAAAAAAAA........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........11..11.................11111111...............1111111111...............11111111.................11..11....................11.................11..11..11..11.........1111111111111111.......111111111111111111.......1111111111111111.........11..11..11..11................11.................11..11..11.............111111111111...........11111111111111...........111111111111.............11..11..11................1111....................1111...................11111111...............1111111111..............1111111111..............1111111111...............11111111.................111111..................111111.................11111111...............1111111111..............1111111111................................................................................", + "door": null + }, + "contentHash": "fnv1a:212abf57" + }, + { + "id": "z0bmedey6aoc", + "name": "Rosetta Stela", + "category": "static", + "subtype": "building", + "width": 24, + "height": 32, + "pixels": "................................AAAAAAAA...............AggggggggA.............AggggggggggA............AggggggggggA............AggoooggoogA............AggggggggggA............AggooggooggA............AggggggggggA............AgggoooggggA............AggggggggggA............AggooggggogA............AggggggggggA............AggoooggoogA............AggggggggggA............AggooggooggA............AggggggggggA............AgggoooggggA............AggggggggggA............AggooggggogA............AggggggggggA............AggoooggoogA............AggggggggggA............AggooggooggA............AggggggggggA............AgggoooggggA............AggggggggggA............AggggkkggggA............AggggkkggggA............AggggkkggggA.............AgggkkgggA...............AAAAAAAA........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........11111111...............1111111111.............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111.............1111111111...............11111111................................", + "door": null + }, + "contentHash": "fnv1a:1e1362b6" + }, + { + "id": "7ykwughy6ap4", + "name": "Pharaoh Mask", + "category": "static", + "subtype": "building", + "width": 24, + "height": 32, + "pixels": ".................................AAAAAA.................ARRRRRRA...............ARRjjjjRRA.............ARRjjjjjjRRA............ARRjccccjRRA............ARRjccccjRRA............ARRjckkcjRRA............ARRjcAAcjRRA............ARRjccccjRRA............ARRjckkcjRRA............ARRjccccjRRA............ARRjccccjRRA............ARRjckkcjRRA............ARRjccccjRRA............ARRjccccjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA............ARRjjccjjRRA.............ARRjccjRRA...............ARRccRRA................ARRccRRA.................AAAAAA.........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".........111111.................11111111...............1111111111.............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111............111111111111.............1111111111...............11111111................11111111.................111111.................................", + "door": null + }, + "contentHash": "fnv1a:aa991de2" + }, + { + "id": "mtd2aazy6apv", + "name": "Stone Circle", + "category": "static", + "subtype": "nature", + "width": 32, + "height": 24, + "pixels": "............................................................................AA..AA........................AAggAAggAA....................AAggggggggggAA.................AggggggggggggggA...............AggggggggggggggggA.............AgggAgggA..AgggAgggA...........AgggAggggA..AggggAgggA..........AgggAggggA..AggggAgggA..........AgggAggggA..AggggAgggA..........AgggAggggA..AggggAgggA..........AgggAggggAAAAggggAgggA..........AgggAggggggggggggAgggA..........AgggAggggggggggggAgggA...........AgggAggggggggggAgggA.............AggggggggggggggggA...............AggggggggggggggA.................AAAAAAAAAAAAAA..................cccccccccccccc.................cckkcccccccckkcc................ccccccccoocccccc................ccccccccoocccccc.................AAAAAAAAAAAAAA..........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "............................................................................11..11........................1111111111....................11111111111111.................1111111111111111...............111111111111111111.............111111111..111111111...........1111111111..1111111111..........1111111111..1111111111..........1111111111..1111111111..........1111111111..1111111111..........1111111111111111111111..........1111111111111111111111..........1111111111111111111111...........11111111111111111111.............111111111111111111...............1111111111111111.................11111111111111..................11111111111111.................1111111111111111................1111111111111111................1111111111111111.................11111111111111..........", + "door": null + }, + "contentHash": "fnv1a:4c5c232d" + }, + { + "id": "s9oeu1ay6aql", + "name": "Terracotta Sentinel", + "category": "static", + "subtype": "building", + "width": 20, + "height": 32, + "pixels": "...........................AAAAAA.............AggggggA...........AggggggggA..........AggggggggA..........AgggoogggA..........AgggAAgggA..........AggggggggA..........AggggggggA...........AggggggA............AggggggA............AggggggA............AggggggA............AggggggA...........AggggggggA..........AgggkkgggA..........AgggkkgggA..........AgggkkgggA..........AgggkkgggA..........AgggkkgggA..........AggggggggA..........AggAAAAggA..........AgA....AgA.........AggA....AggA........AggA....AggA........AggA....AggA........AggA....AggA........AggA....AggA........AggA....AggA........AooA....AooA........AooA....AooA.........AA......AA.....", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......111111.............11111111...........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111...........11111111............11111111............11111111............11111111............11111111...........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........111....111.........1111....1111........1111....1111........1111....1111........1111....1111........1111....1111........1111....1111........1111....1111........1111....1111.........11......11.........................", + "door": null + }, + "contentHash": "fnv1a:d073e29a" + }, + { + "id": "sby5exdy6ar8", + "name": "Rain Bell Tower", + "category": "static", + "subtype": "building", + "width": 20, + "height": 36, + "pixels": "............................AAAA...............A9999A.............A999999A............A99AA99A............AAA44AAA.............A4444A..............A4444A.............AA4444AA............A44cc44A............A44cc44A............A44cc44A............A441144A............A44cc44A...........AA444444AA..........A44cccc44A..........A44cooc44A..........A44cccc44A..........A44444444A..........A44411444A..........A444cc444A..........A444cc444A..........A444cc444A.........AA444cc444AA........A4444444444A........A444cccc444A........A444cooc444A........A444cccc444A........A4444444444A........A4444ww4444A........A4444ww4444A........A44ccwwcc44A........A44ccwwcc44A........A4444ww4444A.........AAAAwwAAAA.............AAAA........", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 9, + "y": 11, + "c": "1" + }, + { + "x": 9, + "y": 19, + "c": "1" + } + ], + "lightColor": "1", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........1111...............111111.............11111111............11111111............11111111.............111111..............111111.............11111111............11111111............11111111............11111111............11111111............11111111...........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111..........1111111111.........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111........111111111111.........1111111111.............1111............................", + "door": { + "x": 9, + "y": 33 + } + }, + "contentHash": "fnv1a:3d2b4a8d" + }, + { + "id": "z3d6hrgy6as7", + "name": "Crimson Pagoda", + "category": "static", + "subtype": "building", + "width": 24, + "height": 32, + "pixels": ".........................................................AAAAAA................AA999999AA.............A9999999999A............AAAAssAAAAAA...........AAllllllllllAA..........AsllllllllllsA.........AAssssssssssssAA........AssssssssssssssA.......AAllllllllllllllAA......Asll55llllll55llsA......AssssssssssssssssA.....AAssssssssssssssssAA....AsllllllllllllllllsA....Asll55lllAAlll55llsA....AssssssssAAssssssssA...AAssssssssssssssssssAA..AsllllllllllllllllllsA..Asll55llllllllll55llsA..AssssssssssssssssssssA..AssccccccccccccccccssA..AsscoooccooooccooocssA..AssccccccccccccccccssA..AssssssssssssssssssssA..AssssssssssssssssssssA..AssccccccccAAccccccssA..AsscoooccccAAcccoocssA..AssccccccccAAccccccssA..AssssssssssAAssssssssA..AssssssssssAAssssssssA...AAAAAAAAAAAAAAAAAAAA..", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 8, + "y": 12, + "c": "5" + }, + { + "x": 15, + "y": 12, + "c": "5" + }, + { + "x": 11, + "y": 22, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".........111111................1111111111.............111111111111............111111111111...........11111111111111..........11111111111111.........1111111111111111........1111111111111111.......111111111111111111......111111111111111111......111111111111111111.....11111111111111111111....11111111111111111111....11111111111111111111....11111111111111111111...1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111..1111111111111111111111...11111111111111111111..................................................", + "door": { + "x": 11, + "y": 28 + } + }, + "contentHash": "fnv1a:30852f2b" + }, + { + "id": "65mnzeoy6atb", + "name": "Meteor Forge", + "category": "static", + "subtype": "building", + "width": 32, + "height": 24, + "pixels": "........................................................................AAAAAAAAAAAA..................AAffffffffffffAA...............AffAAAAAAAAAAAAffA.............AAAAAAAAAAAAAAAAAAAA...........AooooooooooooooooooooA.........AAooo5555oooooo5555oooAA........Aooo555555oooo555555oooA........Aoooo55555oooo55555ooooA........AooooooooooooooooooooooA.......AAooooooooooooooooooooooAA......AooggggggggggggggggggggooA......AoogddgggddggggggddgggdgoA......AoogggggggggAAAAggggggggoA......AoogddggggggAAAAgggggddgoA......AoogggggggggAAAAggggggggoA......AooooooooooooAAooooooooooA......Aoooo55ooooooAAoooooo55ooA......AooooooooooooAAooooooooooA......AooggggggggggAAggggggggooA......AoogdddggggggAAgggggdddgoA......AooggggggggggAAggggggggooA......AAAAAAAAAAAAAAAAAAAAAAAAAA.....", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 8, + "y": 10, + "c": "9" + }, + { + "x": 23, + "y": 10, + "c": "9" + }, + { + "x": 15, + "y": 16, + "c": "9" + } + ], + "lightColor": "9", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........................................111111111111..................1111111111111111...............111111111111111111.............11111111111111111111...........1111111111111111111111.........111111111111111111111111........111111111111111111111111........111111111111111111111111........111111111111111111111111.......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111......11111111111111111111111111.....................................", + "door": { + "x": 15, + "y": 19 + } + }, + "contentHash": "fnv1a:9e1eeec0" + }, + { + "id": "1bvcy1sy6aum", + "name": "Ink Garden Screen", + "category": "static", + "subtype": "nature", + "width": 32, + "height": 24, + "pixels": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA444444444444444444444444444444AA4qqq4444444444444444444444qqq4AA4qqqq44444444444444444444qqqq4AA4qqqqq4444444eeee444444qqqqq4A.A4qqqqqq44444eeeeee4444qqqqqq4A.A4qqqqqqq4444eeeeee4444qqqqqq4A.A4qqqqqq44444eeeeee4444qqqqqq4A.A4qqqqq4444444eeee4444qqqqqq4A..A44444444444444444444444444444A.A4444444444444AAAA444444444444A.A444444444444AkkkkA44444444444A.A444444444444AkkkkA44444444444A.A444444444444AAAAAA44444444444A.A44444444444444444444444444444A.A4eee44444444444444444444eee44A.A4eie44444444444444444444eie44A.A4eee44444444444444444444eee44A.A44444444444444444444444444444A.A44444444444444444444444444444A.A44444444444444444444444444444A.A44444444444444444444444444444A.A44444444444444444444444444444A.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.111111111111111111111111111111..1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.1111111111111111111111111111111.11111111111111111111111111111111", + "door": null + }, + "contentHash": "fnv1a:a406b639" + }, + { + "id": "6mumquiy6avl", + "name": "Meadow Totem", + "category": "static", + "subtype": "nature", + "width": 20, + "height": 28, + "pixels": "............................AAAA...............AggggA.............AggaaggA............AggaaggA............AggAAggA............Agg55ggA............Agg55ggA............AggAAggA............AggaaggA............AggaaggA............Agg55ggA............Agg55ggA............AggAAggA............AggggggA............AggggggA............AggggggA............AggggggA............AggggggA............AggggggA............AggggggA............AggggggA............AggooggA............AggooggA............AggooggA............AggooggA.............AooooA...............AAAA........", + "faces": null, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "........1111...............111111.............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111............11111111.............111111...............1111............................", + "door": null + }, + "contentHash": "fnv1a:c59114cf" + }, + { + "id": "ttfx2j0y6aw4", + "name": "Twilight Caravan", + "category": "static", + "subtype": "ship", + "width": 32, + "height": 16, + "pixels": "...........................................AAAAAAAA.....................AAAddddddddAA.................AAddXXXXXXXXddAA...............AddXXXXXXXXXXXXddA.............AddXXXXXXXXXXXXXXddA...........AAkkkkkkkkkkkkkkkkkkAA..........Akkkk55kkkk55kkkk55kkA..........AkkkkkkkkkkkkkkkkkkkkA..........AkkcccccccccccccccckkA..........AkkckkkcckkcckkcckkckA..........AkkcccccccccccccccckkA.........AAkkkkkkkkkkkkkkkkkkkkAA........AkkkkAAkkkkAAkkkkAAkkkkA........AkkkA..AkkkA..AkkkA..AkkA.......AAAA....AAAA....AAAA..AA......", + "faces": null, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 9, + "y": 7, + "c": "5" + }, + { + "x": 15, + "y": 7, + "c": "5" + }, + { + "x": 22, + "y": 7, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "...........................................11111111.....................1111111111111.................1111111111111111...............111111111111111111.............11111111111111111111...........1111111111111111111111..........1111111111111111111111..........1111111111111111111111..........1111111111111111111111..........1111111111111111111111..........1111111111111111111111.........111111111111111111111111........111111111111111111111111........11111..11111..11111..1111.......1111....1111....1111..11......", + "door": null + }, + "contentHash": "fnv1a:d8d15418" + }, + { + "id": "bln8teny6awj", + "name": "Pepper Fox", + "category": "dynamic", + "subtype": "animal", + "width": 16, + "height": 16, + "pixels": ".......................................................AA.............AhhA...........AhhhhAA........AhhhhhhA.......AhhhhhhhhA......AhhhhAhhhA.....AhhhhhhhA1A.....Ahhhhhhh11A.....Ahhhhhh11A.......Ahhhh11A.........Ahh111AA........A111111A.........AA..AA.....", + "faces": { + "right": ".......................................................AA.............AhhA...........AhhhhAA........AhhhhhhA.......AhhhhhhhhA......AhhhhAhhhA.....AhhhhhhhA1A.....Ahhhhhhh11A.....Ahhhhhh11A.......Ahhhh11A.........Ahh111AA........A111111A.........AA..AA.....", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......................................11.............1111...........1111111........11111111.......1111111111......1111111111.....11111111111.....11111111111.....1111111111.......11111111.........11111111........11111111.........11..11.....................", + "door": null + }, + "contentHash": "fnv1a:221bfcd2" + }, + { + "id": "7f885l2y6awr", + "name": "Glass Manta", + "category": "dynamic", + "subtype": "fish", + "width": 16, + "height": 12, + "pixels": ".......................AA............AASSAA........AASSSSSSAA.....ASSSSSSSSSSA...ASSSSSSSSSSSSA.AASSSSSSSSSSSSAA.ASSSSSSSSSSSSA...AASSSSSSSSAA......AASSSSAA..........ASSA.............AA.......", + "faces": { + "right": ".......................AA............AASSAA........AASSSSSSAA.....ASSSSSSSSSSA...ASSSSSSSSSSSSA.AASSSSSSSSSSSSAA.ASSSSSSSSSSSSA...AASSSSSSSSAA......AASSSSAA..........ASSA.............AA.......", + "left": "mirror" + }, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 7, + "y": 5, + "c": "O" + } + ], + "lightColor": "O", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".......................11............111111........1111111111.....111111111111...11111111111111.1111111111111111.11111111111111...111111111111......11111111..........1111.............11.......", + "door": null + }, + "contentHash": "fnv1a:ed8b326c" + }, + { + "id": "vuo4tnuy6ax0", + "name": "Festival Drummer", + "category": "dynamic", + "subtype": "human", + "width": 14, + "height": 16, + "pixels": "...................AAAA.........AccccA........AccccA........AAAAAA.......AAhhhhAA......AhhjjhhA......AhhjjhhA.......AjjjjA......AAAjjjjAA....AAjjAAAAjjA...AjjA.ggAjjA...AjjAAAAAjjA...AjjA....AjA...AjjA....AjA....AA......AA..", + "faces": { + "right": "...................AAAA.........AccccA........AccccA........AAAAAA.......AAhhhhAA......AhhjjhhA......AhhjjhhA.......AjjjjA......AAAjjjjAA....AAjjAAAAjjA...AjjA.ggAjjA...AjjAAAAAjjA...AjjA....AjA...AjjA....AjA....AA......AA..", + "left": "mirror" + }, + "meta": { + "hasLight": false, + "lightPixels": [], + "lightColor": null, + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": ".....1111.........111111........111111........111111.......11111111......11111111......11111111.......111111......111111111....11111111111...1111.111111...11111111111...1111....111...1111....111....11......11................", + "door": null + }, + "contentHash": "fnv1a:5cc2b1fb" + }, + { + "id": "hnlnlzwy6ax7", + "name": "Bloom Sprite", + "category": "dynamic", + "subtype": "animal", + "width": 12, + "height": 12, + "pixels": "........................................AAAA.......A5555A.....A55QQ55A....A55QQ55A...AA555555AA..Aee5555eeA...AeeeeeeA....AeA..AeA...AA....AAA..", + "faces": { + "right": "........................................AAAA.......A5555A.....A55QQ55A....A55QQ55A...AA555555AA..Aee5555eeA...AeeeeeeA....AeA..AeA...AA....AAA..", + "left": "mirror" + }, + "meta": { + "hasLight": true, + "lightPixels": [ + { + "x": 5, + "y": 3, + "c": "5" + } + ], + "lightColor": "5", + "hasParticles": false, + "particlePixels": [], + "particleConfig": { + "enabled": false, + "c": "0", + "dir": "up" + }, + "depthPixels": "................1111.......111111.....11111111....11111111...1111111111..1111111111...11111111....111..111...11....111..........................", + "door": null + }, + "contentHash": "fnv1a:92282a25" + } +] \ No newline at end of file diff --git a/default_assets_sheet.png b/default_assets_sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..1edf6fd3a7849b45b1e8acc6f81431efedc42643 GIT binary patch literal 131468 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 z zH<_eHOtM<_Jn!$K!pn@uub57UZm*JR0E8V>Qb5L zWQhWWq|+7)f+|~~hB9c@0J_1_oI%3r@8)j{-!giWVY=K%%{C=>@pJpFJpA1`jjqp_ z%OAN=^B4CY0g`D-0>%s+uS_;xANJ6SJp%DRfXRX8X3r(J8<_#oT&jxp9|H_Akj5|s zF&$CcTG_|jkr|*IBFpfBJjAhB5?M2Yz_tZCt^LoSiML&=d6Mk>j-5Mq5|h?hc;L64 z8FD|%1YmlQ3or(8D{*b~g|~rA7&8f3M(F$jKlENk14j$ zAOAG+E3w2~1H74uro^A5RGOm9bR~_mGP>>C!F4%a5)>}saE98U7laM=UTlM6^>X6W zalMtc>)|cgo`vP>min-TDMIgvDmlvbc*{LrSZ7XIaaUE*K24yEzjTcQl_WK9Q)Dy1 z_$AJM5O91PT6*GRPEPXFoSIR+D8B>5=zcV{M>t!4r?W@>$QpV1Ut^8f&;2i9jX=Q) zC~*0e#-PZuSZ&%bp!~^|$1k<4b}(O&QSQ*o@%_}v70>x&_zv#WXJ&y~F!owjU}!=r z734^`X6cUTg9{H|0GCcqU%tRI-~nIL4Ct^u$H}J=NS~Kb8wVj}Hgw~R3?qHLaUe0! zt~pAK4e|{$GDlZJesh46o~XCm1JM-z4u3v=KeE4ou-;k7hbIBga2kP9!%B*Y6RN&& zf!5->r0n^9!Q0QL{~s5;4bcULKxJ9XpY}^*Y2$m^)&4@0gccaQMaS%8)P`*MoZs4! zF!nTTutQ6_qOn)+4r2C6^w??OHs(R6mRZOAoa4`-lR^Y)oV3RZ&2njfhw93R7_zDhc4 zoE^pa6vteN%tW?57X=jWLk;%o_qN>Mds}|Zw)uGziy^8W`1{E8Jh%ikDmcGQXq}Of zTRx5R6`=x7W7dVLSg1jAl~To6n31S%Ic8JgzRDKS*z4*UBzmYix%5`QZJ)6BpVFX~ zM{*^&DR=DzVP&j~8K4GkOD7$ALvxb+t}qj+{v{&vNYm?=3x{IVG=3GYNd`C;5LA1PtxJJaG^}@J`t0*TYK=}}b`>;5vG4>bSzU`0$cjL$VLD~?=+n^jb7BxdMHFq)n zZ#Bxr^oNp2|5PbwG5hS>K>!&X{~2J58;;ok&&)s3N#67WRy7~~l%fK*1?g9jeI@zc z`Was%+~Qzh8;)x~{>x^M>%5g)3D^ThWbalAl7TVZ`+0YlQajF&K0k5jsO*2oAMYUe z&#FJQH}`)z==wM-6KoH#rISBU5#iSk(0ny~LPH+CDQX4>Qjl87vum*P3u*ZM!K&)} zLE!e^j${C^`$#6VuM?oAOvB_Zx5`X9cMuBH>$R- z7l2#^{*2~o34y*@8$JpqhZBV@uVX$`ax?2! zrOQ8VRao(a5@d>BQ2y2wpZc`%@S5NXMmO2$e~=G{-~!owYn(ja?x zf}=@KcLMcuA0z({4jICeaI@e_2|%o8JC|TH{hv}2Hsx>qRx;I|-?~Zj&#B_|{*hVf z#adu`{$A|=CnNtG<2CE+sAmqjQrqs{<3Z1IaI;(5Q6k7z>)N8s6?yDZyLIiYkV$d+ z@lY=*7X3<-psKRO4>s-#CWb2~BBWS1ebUx9$34!jf5+{}GnWyM^@|4JB^yb7rEh&4 z*McYzoY*94m1~nbD20RS;40U9s%*4bP@rA{_QPcc%W!_pCy-K`A0{zjc1i%a|@-R^+#Dqr%S^t zL7Uw}0QA78_=MU?!$>b)c}iuvKbl0V32#Eq)h)LyZ%4SbnMMjaorz5Jo|B>$P7z`J zi@U%5$f%=x2_)lG&-&+^Tfs!9N_VU(i#<)q1#mP zjn9sDw}Gn!@1iYb1(n0Fk36}i6he{8kVovgkR)HZjuqW=D(;67i8O$QZ)&YzxE?XR zUti-;>DOF6jdAxCef88 zxj`^z;e@`oLcpiXQC@7&f%muCw&GW^8GwXs^85=4`!AckuI^yWCyDGiKIE6uJmAh3 zfehtd?lj1XRo*|bu39Aq=Xn#uS8IQF^x$%}TvX+u^f`c1`P}3A#R4CZ{c20V*kk|G z3T{C!z_Xt_=epzeWqrPV^9|_N2FJ($+0@XvfZj*+(TfK2gPosW;4XNpUnnfucjW<- zqx0O|0l*P|IvVQ_ASV`IEn{=1(?g&RGG)P8N>S|HH&ft8=4g?uSa-Uji`i#8zt{OG=4dh08yedvB8 zY4Tp`?`w zc4}?zRAP{yNig!3G+YT7&JqOFbZbNeUd+~T-DK-B3<=CBtGxIs8Elz7eKRQ&lf&>b zab5$ScOJBgIgnM2z-VC-j1?4F(V(`elEt3^asouCmao~D#L@+*CULery{y&> zL?iyA88CHv*PtJZqvSb_ghS0%eV)@<7&cZ$sAcEntbziu^@P$ZIbZ4924kFM%bmStG?Z_~{0h0x%NHuhKd6 z=|RY7Kr(-7U-cs`B*T}i5$gT=Ln$T_lJ1u~4y%Jig*JN*R4E2$BI^J`b7>{bMi?wecB3J+U)6P z)>ad0R+ZZ!LS{n17BF8(0oK8KkR;f9=lJtoi1_HjRSS(jN)!Oq?*JDs=ei0X=T-th zp-|%FyQ7ph4nq+W;M#jawZ2p5c3g5|7hoN#17r3cZ$qxPC$kf|?O3_(6x)OA zjEAnyoV5BUJ zw`_G!m2Sn^nAr09Mp*i+S7AH;epq_%pdTM zB;w@q9eCGw^?~+25HDrM3E27FeN0Un?$K>i?XRr6jPP2V26STh#|0;3bXi!~ zV4!g+qa}-^X3~*309X%ZUY?G5c45KXDgaJoB3!6_V88Q9nG32rSU~=hB6GUuVxIOv z`(8VMCuXhz+;&m_pgD)BG&occ54E*TUKtN5F80{A&9+wi%9xT?J5}edO9sN!-+%Kl zL-9*IG_nDZ=YM&I8yHGE*>P%b=!_lF8-v4G={siy%${7JW+`sj5+@Rv z3%DXwdUjtU_s1j(8tN&1JD!84a{^Wui=-F3xNWrit5>rmQJ>zyq0I2C zDw{c-aSc5emYil2t?W5HkTd0kID8bD%kUWjUatD+PQdRlQxjR}|A(cjJimcA$#JW7 z>?v2FIKMeB=twek5`#;cVh)eoBH5LwsQ`X=?z%Y+BLBnytWn|2Uqb?Rl zx(hSF{CpyuJQN|?a&>0SHB_k-nF3-zFH>)DeTe_fT!_1t4CL~f)m0BF<<^(tz(a5V zyR`&)tN(EIi*EZ250`!XMlS+$O(|o19B$HfMHLH8$9czVQ{FxZy$SkZYut`6^A-`9 zlil;siSzsgft$^#uB%|~0FRa~&Xq1T>nn9h2GB52@s0-g;s_hFb5M`!*Kh!3krm)Q zbm!hczv(q=k)j1!6Qv}HY=H$wy)ywZpLlQI2()`s)VbmUqeV9`7aQlHP6@!@Nh-8$ z88;IFGZVgJMvaytoIk&{=3nde#78JNHWMdTZ#50XH5A{pAbkFmi~@NEaZvP~NzNASGD!rVh3fm6CVMy8A3NrpXVv-fF+RCp3L}1QR(NzMZ2FHLlg^-%kImZY zp$@Zg(Tda|cl+6RMXzzDugds*IT*nEwo`}LwTbKss(Xjx=-%X4Qt5s(=Xjnc3@STK zm+$A}<9i9t2*EL!r)=m zFTiLghyBy;l4@*!$RKSHnNL9-2uzMHg1wJ&m7dC^T9fG5wXqCU3>O;KW}L)vTh0Jq zsxJGAva~j!b8H(@yRrR``su>;x;`E>t@n|D{OY!u0cL#4(o@4L$uP0> zdRgu)Wk!#iAar{V0c{o=q`KHsJ1Ydu__6$0@Kj53da8omq{FdQhNN-w3GZ5s!i z1f%|*3TYjO2wY57W8=fSiNyl#+YZ^7pw`?Mp7(&hMuWG)T}hj3PP@0ixvKi7@9*i! z{_D@<0`Hw&3>e+(Jxn%O<5j&K+OAktz3=$i88U`3gm@vCi+ov@-VrHUv)0#NS!#Az z?qNq33FoJ@3iN>fXCK~)@!ezx`uYW+#QQ*!qeb+xLj4rPAXma9=q76F-?;JT zPfJx6Pyr-3Xd2_|!xKttSg&Pf2CILo*Ez`MNXz;yC_%@Q-&Rn^AvC*c{vYN8jjTKb)`1ZGYT?=i$H%R z9-eX_Sa>~O;9U>X@#>LR&=53XJaQ2a!%|}l@AR?7=&-h+gy%kXj%EZgw6Ws;-|;!Dd5+{ z;DQRyhT4myh<=ImQR0qO5XC0etW9z^9aZE>^%W5f2fG-w9jw9lq7yLsfIG3;?1Ii6 zIcwHvxpX?Q_;fsCSS9$0V5(D$ywO^5MZ}mV*6VEWI>zwbA7qmc1oEVFUuvy9a!?H3 zS8bafBiCL&o*U+pVauq;r3URc(*NAB*dJduNj^+)nrx5^U#82zcXIO@l8%KNCBLZ% zdh$@8)FL^xwv#%k?KV4QO7E-D3#Qo@kM-H{kX|xQe8$OyudupuWC}~ModJBR{be|p z8&-z>rpnWONY`JIUtYQj+E|aBkee!4 zaeQFKu5r#QXGEMzR}4>u#P1jtD-7GiaK+8`M9Wh{Z)ccdi3V0v_deBnL6oM0Z79+6M$ca&N@&|MBoD|PC+Nulv9K6d5 zWG5B~=UOsX`HYLbTXf-FX(yC#dtq$AEx$Mn({@e%z zpjX*X#o)$xlci!?W(+fia5b~kg>7=GvjpRUz%@UY%0cWF0b_X!0(@blf#f;EDy{j{ zE(LZ+;6c)Pl$axkyqP1JWo>5>5{E|qwJH8zHs!Z%Gndo5?P}Ad;*kbpn)|1^9!qyo zofI-qkJBP-=@TE$A$4N$0b1+n59hWI_D@N*xT#ip5JxkMNxgcahA`@Wb&7A;F3R@nb}Kod!Z2-5|k)!nwV>jmwBn>be19< zqlzt%s?2|p!t?=OepAXF4RFvgF3E~qDdC(g1|nHY6im^o$R)*dx-SL5|D8y*Jfke5 z=Rd)^q)ipw1j?5VZ{=iqjTT?+Wd@8AmECBG`Kf=7L?B$3W_oj!3VL35WE*xv=iF!|AUzbQv8|=@+jr z*8p16i7RUbtISE0jG5n3=K|vn?R{$a=N32fMZQOy9dEUgf`SXw#&|#O11HM6(39OS z@+Q_R_knZY?~lGY1%7)%{6F-6VuksFAmCSmr?HLKKMu8>bKJ2>;VSRnPt^fO{WhIV zKB+fFI5j@2lGow^(_hTz;sYC$`)1RZhrKZUcfCSFZN*16y~_D;egKa^QK7fxMOG}++e8zmVnSyr6^>7Bv>vVzg6M`l3aP8 zx)el`bdHdgjtWe^QW)D)rVNTLjB0=NWP%Ujth;;;a^&Na?EbXGov##@Acn^);{#tF zqCW8!dR<4H;xrhnZO^tL_&HS!xU3FU54a4vOXtRK1a21BO=Gro&m*5;-WRU@sW`Q@ z|KxAm3xz6>37;Mye%S2Ij2%mD5(;_Vu1(qJA81(Q`pk}oN3{4?7skg(dsTGEcux1& zR*GyB`yj#KT4+|WrIcf;>3rI@wd<+KlQBlezu#iQR!_2wms^edZ|_^XXU8X(Z6pX~ z$898FQ(OGU>2PKnY)8Jb)~27ggI!^K(nrH^V~*PgGID=Bw(HA-_B^{uB?nm+2OxT5H=7+BMAd}^L`#CX$oApNttdv;cjJy(VL5O4G4Z8fUZNlqFa>-Q6P3%Yk6 zJlS~kynkNY>cD-?D|>FOOlr%98U72vT8{jdzI~gn8|`LLV*a5kTRNld4yAA3_w^6P zjh{Y#bhv!DxC;Y;xM}a?+k9F!HFeK#%aWBloW6bU*PmN!%S3D?YDfETTR3(=$U%2> z@5;rmFG)~r>;8Ng*uGC!7BUk3`^c+}dWY58pbN?l3H=Z)G7wqZ^o-H%6K zcB{EWX(mE&vs+(3=+(uEqtl=GXfk>W0T1`T&*^dez%FL$J>0 zgYMxH!9Tx9`s=49)BWP@j-|o-eHAX@z%2~_Q*>+KF06SAY^9a4(I(_G5luzRufbf_ zT2?7R#-&rSA{I%)5<446Op7cF`exvoPMW24>M48LR&TyHU)dAloO~`cxUqD4KH0`d zxio-+nt|QER75?|%HV7l0=N3PE;U>k;5RF?Tx2_(k(lQS(b4oir@JmSDe3ZlMWoVf z82$d$MbdU5|MtvZ!Cgl7#t=y(zKTVv;fRnrDSjR9R=yDrW@2{MowPnhZHfj?# z=g7*Zg+Qm$-7|UJlifRl9zJKA3)yUi0hwQoCbjg{ie0>l&a$TJq2#OF(64NaV%eXu|oCQDc0@(0>eH z*iQA|-1s#voi*c_{kVvrlDWu z#>PuED@#>Df-6tb8uWJ2JPqztkDaDS&?wlCPoXswa+yj4$U5fnP=_v)U&VC|$ktmu z+#7@e@W373^^W`rszDmUh;)HFC>mH^B4g+rt*?jxnt|e-Imw3;dY+iky>p}uZ+Qp- zi<$9gYlpO0B~LQI=dC$P4vb{cNQ;bN zMA3<&mRC{f2>r65tsbVKewA6Xa@H*|q+C?E=XzD7XNMQtIAxWuceZ2Ygc@Tbx`;wP z5s#+zD5GgDdA04HlmeRuxw+vps43O6HEgw1@G=oIeprgvb{0sgAU&0E=+8q@!hRjl;+z zkm&xeX>KfzfXteM9zPJ0g^@hk}!qHKNXOckVFzar@Je>r)YMIFs8n!8d2+&P= zGvL%b^A2QzcU#*vf=$eA50}6%$=w4iBy?uJUP-Sp)UAXZS4bO&tDvFsJFSG zE*Kcri8#StHiTYo9yg}Gaqhyc7IWsxcA?kJna0)$XwQ2E6K_LS<~sB>x?-+fyOxFa=EH2f)$1#8FPohq>1c$krRDT{9hH$e zA57EmaYpLe)N>MDsw!$?u+Ue#xaa}DjCacG{CLfVRHG$Pvpf)W%eJ;} zE;vC*SsO>3?-3-eQykdA|<{}mSFZ1SsyBR6ka(W zSc)DVBa7KChR^hsJ{LvZ#KtGE38s9)dtA)+Y2;92`=X!H6aR7KAVP zmLbyhBqm~Y`iabd5S%Yd&mq$xp}*U%6*LSvEm9M)PIZMVrS#1VDxEA?Hc^o-6SCuG zcUHxrH-|;NH`Yp>eob5nkfv-Ua)}7#3Id;b$85Zu&k$F_n3(2s{S~({m5m1h0b}M0 zfJQ~HRx~g$5Cf&2xuCce956>rxx&Ks?BwNT;cGucDM3pP4A7_^Guyp_hNgM7r;Gt0 z2)+2)&${2q6YTUe{n$%5Vnuh3Um0IO%bJghq$mF+Fe{ro)j^9ca7{QWF5#_6on8R< z_GEDL3CA@@s7m&8qPJd#uTn?hfJbu)XMM->d2Meoh+Zfov|y`$biibfImH)y@NZb3 zKMaoHK-Nbs9*C>f`)CagKzRpaWH);H>9qTGB5?W0t2?+`mhZM172be@d(of9=93;4 zHkynC7NFT2u>CHL_s?RmEoL@6A@@RnnfRT#E0i)K#i#^Yy~ z>1~dE3*zu4Ou`C7p$Hi+vuZU$2}HC1y`UX)?MT){{Sx`8;>wfuxTc*C%JxfxJ$Z6+ zGE2nJR8oy?iCe7eW5yhWy{%2&{pM#uD^qUR+7(h>>zSviw6Vy^2O`)WB!QExC0+Bu z$)`;-;&>*@uI42qh_Bz{6>G{XeKR;Mb5hYS&|Dsw6(g6$J|1h>GOly_+NZs8PF*L- zn6c&v()w0@#GQ!a>_5O)L&yU`7#{ea|t(Ok^hHu z?OI?;!`XEHzUfu|bj9bX<81;?4ef)DT^Y3z8$QL%1wK46^%@3#+1xy<_DXD6*;t}) zns_j+Kca0KzgZSv{rni;OGZat5}zc@loM5%C1Rn6)JsfJ=dn?lTA?LYdemCwX`@>h z0S-NJyef#axN5HJHZ=5V8=oZM={&v67nw-$1P5!v+)4?ToS4`}FXjYwh2VEfl{wJ` z2bTrLZTMUxAZDP(wS&N#43{JXGE-0+_w^<+J1+oemV1mWHtf*hLyOafZx@!1tn(St z9Wk7?eW*#_s?;aQ^L)~05M#}DGnhgrWO#GZJ`JtJJK$>825x)}(TpX7EEF z(In@KuUmYBXJqF3Mjf(zP&&@bc15BNea}q~Qmc$xoS=2a6yG$-WvlaIweJfHChw%i zN93akYAUXy=J$BOZr4uA57#(Z1VP| zyyk$_##+-`r1P@rOS9xS{%4?QuPBB!bSPZPs##V{5a`q!IahL)9g08)r&%x-oeEMp zd8b`8G7p+#PG^*twKs%9oa z&;y($Dkqm_v#!i<8T4%733}3cAW6xa_sM~U{DcGR&xhg}wbxUo?zE@jB0G?33~t1g z%Wqs;9{r}<^Z3or54*KDzgGWp^?dIAmuu#K{qprL_@5qvz@;|?hL2XVVDTKJnb{o( zv}<2KYg1p7ou1%hOxT!@j1<^nsF7B?b!5%KulAo*^8DtgUdSU~MY&3t0vE)hRdId= zp7+5S=tW?#-#KM34An~rTuuK0#H?%cPIp&7Ng^i~j)m_{%f`d9Eo*dNYF>1hZqz{8 zRG9#g#`XQwk>iopZpmO^G+Uyr>6mrs@Zs`%dcPMoUrB=+HLX`4QGdX6awdWI2x24qnwM>9e=jaFih_-45pDFeUw0JoO}n9kYmPsgIb((e3A)tGd15< zZuGLh+Nxe1BOG*P?$KLM6n`R;>BqaPn@N@<4{;tmfBG~-w+y9!e-*`S0dO3jdfzW_ zoV3qyoF_;-o+&aZp@z%D{lOGSd;C75JXh0K<{Xxzy(TyU)rITCtLdfdi5&sw!>#PW zoQ1I#2UY?n%XmanuYZVrHF{|lmTH*(3$bD(*ioP0Qi_&|-e8e-BWKFc)pfzf^)hWf z*henqwc$evYKUJH+y2nyPB5+q>@fVG1)LKT7g>}B60|&1jSlVAb&g#}Knpx9`=}RgHgfx!w=M=asvp}yEK1`vL7*%54;c~CtR{+#DQ&Cq^n>=g81&a^ykept_L_HnB%}n zb6l}&w|w0nh!c*T~(tkR*v|m=?IjEV;E`ZRuPnw z)HiC6UVq^vIZbhzkaxa}h%KANi8>Dz8ny}8TWa)OQXm$3+rTf^aUVPK8A&tK-oH2% zMk!ew3D;cniWUtBc#!EBu9>AjY|4LM-(>L?MYA#tRpaz^gD291*+@RT%HDMvTi@R`GYf}S-2G(XkNawQ`s}D~6EQW_9iai2D951-0Zcl1cH>pfd0aU5TJ1HuPrAwU$N09t6 zpS$K&b|_34D@k;+s)oyWh4K`D(yIU{J^gj)K;C50zQ&Wg!2bE)6uywXXktUH4&hiG#(TxaDAD{f{8tZ;VD)Cq+GiMi{@(EB#edBP66ekY?+ed%2ne z#P_+658#zZ`AJoH4nEjpRCp%b-1o7XMbY6jQ&~m|i0N*FiPd^G_U~-$4cPv*27gMY z%mxTnUg{sZU6@U*S0nlQMfH2TbV(GZHtpP_m+(+mS1-Gz?^uwO&_i=nZ%5RfKBH(*cT&))?ytKBpt&-=KHtWEW&`!NcCGE>Ef{Brby~d%n~L!(+-Rr#n|Sf|ugc1`=uLjd&tDS| zbj>|~Azf<7n#=q#qKPA-)q~O(b957sg>H$i_$pof|NK9p@5`MI?M}HmzEQ1qet~{{ z>7|wDGCBLL^6^a7=g}#%(ovr>hjowM$)2XLTk~Q`wpwyiT_Y|N%7kIBM#4tT zBL9PnHEPed6kE2daLImqa(Iw6x$Lpu?rj!MwzdWHq1)S(&O{~Y@u^JaEV$AMGkZ~* za2OylAHJxN=8UV&vy3HaGO0p~HDR8cwycF{b(^c=zj2Kv4EDZ@CDD1hoQ$n?Tv~?% zb;=xhuiYqH3@z3@)q0Hx)`W>TmG{-NI%A-}<9DdhFZoTbZ|o;kM21au_3ysKC-1tV zUVQ*%0|m~NIchg-r-MUdN&P!mF;CRHGZ)bmteP)d!-C*A*^HfIQ>{Y9KWut_Fk88C zb~SO6X_!b8)q~)O_6{tcu59N~&F2ZMt~nQKA(FEvy#Q}b7T%I$xMZ5h^3db-|N3Lz zBLl+G7AU^@!F3Lhk6LXMZXw0Y0A)`u-E{l%(+8KFd&;PT8fgxeUr4E-2;JpGOSWZf!p1VPpKMGC zpWEvkJA!ZtTd#AZ<-Is(@@wW(E7d97&w4q}d`zUx9^e7mdM7khpYJ~y(aKv{cx~V8 z;D$jh?wdaz$+rU{EwO`pSB`5f>xRQ>|AH9P))eo06HFR(vHb8&%pD8U`!47sdCVsAe)OMb zzN^ELM1(EgA)aIocSvd^Zy?EzN^*;8Rc%geXnq*|r}pI0M?E6QDzox~tt{x6~Mi%eo} z+N)DPV9%ghV5upVitl7?>2HR}4TB~!YjF=x4)LL1e z?ju$1FD^}n5zqCPon?YBG8l$dWmLssJHnV@rbXVaS+pH^a)}Y5ze3G(a+}{xl^}`{ z_9Rx2OJil#+7vtpjMAx7KIdMKcX3MWit(3|`q*9@K>}3?C9}zDJ)Lx?+R4264yhZ? zRs9)zCkMi!l`{Kl8I>{QIRUYS*(#6*4~`R1U;ZCN?#BHO%WJn9^G472yA2m+1i-rr z+`kXirCTbg_NCI^U6Y3nkuEX3d9p@t%`I2PmDL@!CWD#y%kP`!53jjYf*vg@xWL=< zzLA2cs(liM{IG={$rcu4?s#B^W_R9FPjme4D&M-^uXZa&j&5rUy=Udb5(F zl&8n047#%hPFqtVj6M79<7V*}DOyqCC}C#2z*(YsFo&(sRd0%xG4{iB_HDC4g->E7 zURJ7Qpz|rI1Kvibvali-yTv-FMAN9W$`!#=ZIr4f(Y_~woAVgCg+-=R2dlJhtRg*Y zZs-&H^G%dbg4(QG?s}AC7*ZEb7g7z7v1vf6!E?{2%eDFzbR*#_Dh^Px{Zb1#@yyLq za)=6#h}0K)64EMRU-d9S(isVp5f)UcJX1V{MW&U1Xq=$j%P2wkH%RFRkaBCJa(sbt z?+PH3f=nub)2gx=-J#LHRUe?$JM7wUhD%x+$nZPoRAnE6IH9JfMsg`)9`0AV zV;QIA>?oh%oOiBK`lZGL!GJf9dmb_@oNEkPtLF$K*>{;Dh7cwY?L0<0 z(-Hy%FHx=^6+k&bwrZtdC+&8)MYw3Kl{M6->s3YV)Cf09N`+>%vy)HW-X3y^)bsW( zq~AsVUceDL&yGS~j7L7A8na>Nha*c8m(C@~k~QJk|c_K;dZY zh)IE60E(Qg$_Apd5Jvj=!2_h*sYMgE7y^D1j21@SE@3z z;Lu;)6@Ei-#pC0aM+6=I%>MkKXNjGONnt5xTujnzCSBBaxNt21k#OYXfLz5V96Nq1 z0ryJ6b=Ur{l6Q+LTexxUut|yyvmsJ-lv{)UQ|*)3SgE6xc#;NWb)xn4^)+7MaQ2g7 z!v*H4f9yPYsbQ)*I36fR@+rccL7{$9SAfU<9mW7k3Hqs`gl$WoSDT{ixtp-)*t)R8 zu3s*T$&W89T&6BI^Z9)8asoX8kUy)H|sQao(gMTO$cmKh{~hI zcv9^L)#I-Ei999gFeYl<=4V#MD7l*yF^7mDJ65C+*g>6n^@BY{1Ld6EdsQ^??CHCh zS;jrP)^+B&O{NykkR zu{+$Z)+Swy(t2AB z(alFork%|_p8dRwc z2I+41BW05_;IXF>9F}qB)vmR4Q>hT?@?icgDQN!ZwWjFWP|1`p<^T}y|IWLRRT~gt zkRZbtCLSf=4{C^MS^LUxfQgjs|0G8+f1i`1@0U59@{om^)nr_tAxjDW`{^%N_EZf_ z%2~`Z)Gm<{ZUgU6@^-fq-@CUi&oKgdtcVUK2&T8m>??i|*5*%neeb2rih93C*K&sBL)d(xm zf&Dtv!p&MnX*$G8W08xmPK7pkZETplwTpP~dC+dB=7S~5p3vAr^%TV6zXY)EKGJO@ zmr*&#@hqDmcZ-&EnF39wDg7?KLu$ z#wC?kNZ*hjsXoZ2-dN42U>DtAlKcSY8jh5QhqNJmy?6Dp~VVdi{7|#(!MCgM8@LQsz9a-m%N>BEkjQj(26jbPmC%H7` zlFVV;>Dmh~=!tHFP5iY&UvE{k0E2Z%qY!z?jPWVgn=86fKpt~o$A+%v=;>6%Ui~X* zjqod8=;hn&ROHJFc6GQsQa~Mu5W72ArhYdCgs4CN{8JXwbzYG@evva=w-E z+Z$_m+jpLYMB`HKk~qvxTr`7}7FW<^>+=zn^3boyCoa~v-zvZd6O3?*X_1-j1MW{B z>$M+XMlD$Hh4Oa2goai>?z`S$@Dhtn18*dI`4pj8|N0i?r;mxB%f`7FaUr-IqzSIT z^rIDP2VOyiHjRQ2*-S8?D@^Z-S^FuUdx;0$jUX?GjhpB#9*uL3Y)xUb#0kZ z{8aGjmOOXY3@bfdy^Z|*k8vp)ib*I`-=~LWmEDo@M!Zw>q{l~j1{dZEB^F{752x)A zb6F*!ICmN=GyN}2+50m~$?O5MLhlpG!{z6P9&J#R6y7TG4ohpc%`Hm54R!1KQ0?r# zr%KL-T7o~OaF%isNZ`I-0TF%1L`|5x18F?%^9tT4qH>N~Q^q&!N;yR}b;R`9?Pw4p>B#-AA^7rlO(;qS}i7^I%KJO z8LQ=2fC&LF-r-j-UhpYgeP-yJcfxGsjWKYqRI6H4NW23xsy;UVFL+n`i(T8~fJ?02 zv@cwAxSbIL2zk4BkEsFF;M-4)-EB!Qkbx5L_k((&_0e7rTHzY%EvotZfA2yGVp-Q}2u?1GYJGA1Thx5rt&0D2(bvQ5dFJ7q+T{eBd~MI<=+4IS@_3+BJ2hZ{NDG_xlK;v-8*9t-u|jt0ocI^X8pzZ0hj zplc8e4z@7(X2hK5pK$Q*I9#6s!5kv>?9#4 zNyqFUKf35;W&G9ekV;=}v(Q~N$a;T1G&2sX_~H&jMhRFx-EK0^%(zdezu8pC`rGGc zLFSK5_&yvAu&4&iqXAqTuW1-`*_O>HwyLwm(j14*oj^ZuMho$3udVp-WTpekX<7?k z(5zzn>LZ)mRuk3`-@iGGa1@x{vd^4(g?=JBB&8Sh)>c+V{$IhZ*plOo3>S+KId~9g z1z`=0%yo`)&vmCE&1q|X3$)y#G*v;c>)LGsnSKx|$w&?N!W*|Fhvt6qK|u1T9JWl? zkvyFS7|$jxJZz++vW?;}Ie+4n=3o=6Z%hX=BpFfCr7m7NZ2vv6j*gvKNAH|&D6dGh zScRkSxM^02I0>eQQKA~1*fAcn%L`t?y+-I^+J5-V%`1yAM7WtGnPnH2l6{g}3P8EHSRLgs1Mk?RY~{&&_zm?Ilz+JpemZlU$ZWC{$>a1x{p@BUwO+*mp1?6aLBe#!7!b`#AVCgU9@2Kdh| zqzR8Yx`o&AjmM9NPT8|RS4!dF#-S%;Z8KjgrfEs@(W;~mYJD3tS=4;BEq&8z_;4>T z@RZ0orf-s(je{a6H|LBZm(cAnl~6;-eU`RNQL_7MJ+7iWCEq5W_P2@Wwd0Mg!<0P< z=8lx*tJ|L>WxHRPYfU~ocwUILAO^R(GcWI|>bKXgiu|hHcKLi5ex&EQ4cGnn-@p0i z1zR^;I;}~1GERyFh?sb>`VW{p5Mb1e)ed|S@ZF6;b6TTqHUjkv{!S~j_=G3TC>mzb4&Qt`)%2sYfV{F6>iu=i(wM# zqwWHlKBpY&T$LVs2Kn&~Nd11D)zcAZ__(O_pXbP#X9)~8+3?JD$BkTFgO80kV_lfO z=c`rnBYygE|2{tKyxE-ZW|z#;$w^F%`^W?O}{xU`4$Ii(SJsQ<6ZI?r&y zw;msm5s`ybn1lV|bMy0SxJrM1iTZ91`%}5o(vOyE&r3QMvhOU5U*K(JI}{WXfJlp zbzCFo)D9OI4_6M0TX6M#TG!uJH4@K8Cro6YW=}>^`4>+PQli>qz>$uT(pc`*RzNdFw8$!|+-?6_joG(hJRg4|THLqms@G3>=ndytZPhHB zGsWW%`imUeovA!`Ca;ND&)3S93y;+D!4p(w?T@XD z3Q4QgGK~(mKK%7)YX3C_;ZRz!>;6)uhAT^KV>}xuOm|Evce=47E^WT}b=0*ZIiC}6 z4!UoCZEsVwnjOVbZ?sZK6G>Ex7-8}*K6%{R-&V^OlC_r3$J}7%3%dfyz4;QHKC6pX z<~1~3s_nz=^Gd#E`k8EeH;q&1GwNVP?Gt@Bb4XmoW3ilw*#Yk-?t^n}Lb;@XFl@ z#Yff6ONVV%F`_rcTkez0IlItxfg|}b>=qbZpr9Z|SdT~D5 z9eqLPYPG)Lx&N3q)b-|XZ7loaUW4q0AG{ux2+zTVj*zlVgZ=B%vCFiqzd*aad@d%# z$*fpXOnTBq<6YY7H9S5hlxpMUYG;_))MjAmY^Yw(F4Nu`)WrnA z2Y!%j-BN??_#2In`%|N$3-xxFNPT(i+==}>JZfJ#}8OP5XV4@_6CJs>$o{ zVYnYqi3)fahh^qz1M;yX4a9^Wc&1u>>FsZiRxE6tc7r+HV}tgxt_DducV`lSMDA}u6YWYHP(X|{ zx?*{@ZxaIFi{JSEi#SDw;-Q`KzvUfrO9p!QtpM_RNVK;Q&_l3cAzxnp{iiKp4ZbaD zcC}jbkeA3nYIZ}DvDHcX;DMv=jkh_~o;$cLYnmfySPLxz2eFC_X7|H3&bcFE%>eN+x#5eMpZxjrKyQ<7$_7DZS0BVS(AUy z$=57)q*jZ4J#ll#aQl3ymGFa;XqkxYNpd%L<#3D-kGtS+sq?@nvhZpvSFSt}83`oi8)Ch87cUz$4{I9^O7m(3$N^2icjWKIuC29PQF-}nREt8X!pqdyZRYu z$@*w^DHtF0EiIcKRS9bkM;h7w9n#}I|M$w!y*fuW#EPVVgjnnT>Y=l;YGL>D)24a! zUX&QJ8Ba1J8Ai^S6hrIi=AzM~k;0thwyG=5w|r1^zf#b7^g;6)gmR~ zUJigle?dhwWD-MBR1TE#C#`PCctj@|_j45E?kX9zW%<>O1)&s&TY4HCGIZdq+EMaC zOBbwDV7-f!(c4ev#n4(xvPT9xvkR(9L$O-~3@!cGoGp)||&L7l@{K z%ZAzU96v#&jV@lS)P4?9W@n)z4#GY*u7Au} zeKH?AxaTbS}i@o3-s<^U}j%^@YxdiUucb7Ubt&@S@~}1*JP(V(K`qYP{XTu2(`R&hvigg_Czu&y@*l>Xq z=o|p<^YPy8RJt{@(5E)3#RHmMUg{!K57(|ylXrWVd3BJ3%v&gKSFk&w0EQPOR}U*c zE5U`;Q^NZ24G0r?Ii4%Dl^NH~TI;L`b+eO&9vufVdPGNeZ!H_ql5ss38WQbQKZ_?i z9^^Oeb??%a=rU`#QsgH${tTelX}t=lKn`Aw9BRnweCCqEJu7AXd&k?Q3P6nm8NF)uXzg( zM?u!i&HpgG82b`9YOrr@Ym?UK9ILku5K+(#cI#Q|$SAMPFm+N^Rqau%n^i#ue)z&2 zEbOC3=E~jOha>&({bqFkkH^V+MR#D^82a>ys5q0}n#!mT%P0zow(hUqAMavCXv)@F z+g3o0j*+-&;oS9t8Y{3}!|s~_#n?tlWp7tjYKB9F5Yi-`pMUTTXR6itYHh*3e)pJ* zV!yMcyTm2s>Ro+09~PJtcn2)ZPdcZakw=*-rbPGF(LqYKnWGHKM?aJt3Y!y9*mCDn z!6@vVRGH%uBkKZr5)G2|TVqG3lg!DT!P4gK+rc!)QB_uY`QrU=x9{4h%-Y)8dQxaqpy}jMN-z&U5+wN?PqD*WQrlXt~w-kiDLt` zjP!LZ(Xb01QyB$cO+ihcFL}t^Q%o_ph6p#w>d>;fy1)3nq@@+?G98PuO0(8_wu8ea zJ=y#;05sQTtT$buxUXyTWFb0h!#xcDh<;zzNtP1@(^66x#+srfD=+wDN9NV}ZHqHN zyY$OZIpCG4X+#EVLdofMNf5!!=<@tS#8&}o_i>wsi^bb&!?4K!?9YUyEdp0Zp-HDM z7!>(7n5l253~Gcj4_&fSZjMWffJT$g>ac-#;gr{B+lXiO2|0Otd*_X{XQp7O`95wJ z=IBr_P&v6J=8K6W;|yd!m7Wiclug~IvBxMcbz0=0sD??_(1zQ$ZyO^Qsmy$j7Mg9z zDC{U1@ewMp4=>_%)n_L)+*=qS!m542JHr!kf?=$Mrg=G<)4-SjC zx&+4*_X~}*y_y{MwrVnk9d@W_edOfza!yRdf!YYT_{>VI&C=&tMQf`UCY3XKRus+6 zXnOKg`Di=SJ{Y3rXR?tx9Yh%1qkquog1VZevB$Bl9RdgX73(ALe?4Bm9xP&(Kl?jg zLiL5-5AF`s39x4MnzY^j4^uL)HO@U4 zT|qKaOrpr4GFnGTc4eRsTo5`ZVJXwDGfNR%!*z{x;L!53L$pr0_6w`Hc6-dYEB{<` z_G2;=W3SAbqcS$wX9s%BTlGLjrf_B?fWk=5UV8O%4y)*^FJXio%r5T>-WGT5sOG|Ast5OxEp{1&*UGS&#&UHmLymChuRweY(bPzEfp7h0>0?2 z4!Ii=r!s3_hD4v7!g)#Z+6=LZVNhDQ+1_>#CRE5N9r4H71X6y*n6hm^cjdtce#Q=5 z_i=0J=*vC#sVdfLaSYU>|0yxb!o3&#jB>D~SpnC7Qms%v)P;HhWI#@P*vk@0=63Bpx#RVhYvrz#dxMbvy9FX z8@yf1o2G1NJ@!8Vo|-pD>Y6?K2d4&?8KhptDHUL>40(0mFzU+4h_Xh}&;$ zrbG!&S=*a4)8Cw-ng|?6tu1SZI<~DpO&OVorz7VB1r+=ri!z|*el_ZB`cVoe9?wxr z2Lm6=3|ggz`@U#|q$qACvpJlukVG67LQ;MJWZOZ-e{)}8l$>3A1uP3>G-^EX9YbCZ zn%`LFoTyx@OWeiCJvZ*6(G+M#Npgx22$n82FeoX`LXeK5i5xN2>%qKNvPyrQX(~it z$$HOJfCWT>#AvG5CF&X=ZZ&_Ozk=2kYROQ2AKA0-tbGw0{UjRa!MAy{#gvGg(-ujM z&NsGE=U-$@cjd#_3n^ocoYtJpsu?u43Dtr8u3dOW`Yz4rWN6i^J7Cy-T_ZQOMq}v0C6lYqTdr4Xz9Aftm1RFfkfQ zB74?1Gzs^H)a!6!Cwo52!Ve?7N2A-7mO{xnia?P`b|PU>D%EsX_>(88_r@;o-0362 z_DQKo<@k{yTg^W0Ec;crukxI;`F9h}>Nxz)15IoBYu=RGU%mPUQSre7-|}j+#en#R zO`8(N#!|iiJautipnU6B2Tp<)+0f3Um3^Xcd-X(37P8}vkbae&#~F35iB1pN3(X}W zWxWbv`;#!yS93BL%)DmzHLAV+YBU1`QBWjW4W3wum%f3~4bVHrc91{ARkNhC(;7@I z$s;E_xFsx_`01rvU6n(g_hi_PXqMtI(s>+jcP4 z(U)B>PjJ@%Z@!gyk3{(9mW;&D9j!=k7E|`tU1K~S%!3sb`@xi&=T!VWH$Bli!p19m z7lTnQQ-MrZyR3VL9c^}D3gQPgl^-=f6;~Ps_9Z!Glo-zA%j9Th zcx^U2qcb-x5-d85nz<=;kfWl}8aL7hBAH1OVm2Of-z(+mv6?#!n z7Gac;Q17b+H=q|ap;E1I;^PTzPTBxd*vS>C|9dKg9oxZHafel>4qSLNqJh0Z0&H6c zNJkM2ia5}oh=bV+z;?P-t%fDdGsgX$Dy(c-|g1%Y7zSXfg(98!x@o6UP(37G5HPfBc zi=jkij!(!gt(aF@hUq#Gwg%By{coHAAm2oy5I3zTQXB0y_q3}VdPq5SM_kiywEC)Q znu~z2u#<6>WB%C;@$qa%eZSBiqv^enIHKA%T@A#|_Dc;+<}8$>8;G?Qa_{y3$EkGY zEfN|jNXj=v!pQ*6+qM?J1OEQJ+{y66(3c3W{)JtRccTlr6&Zp5{$2lQR5kJVZNZ~^ ztmgBqS*gpBM~c%lE+i|+;SE|Jf##umYHi7Wk` zu>P~(l06LA*P2}~kM>_{=H|MFT5Q4*`OVTpZD^=!~!m;U7M;O=XS zZLQrGYy5in&|^!_-qMaI8$wq-+u3mC7>aA#?~6Yz3I(>L&82-sYl!UkFNf4eidL&n zasT3V*?kvHIG6CLBu#n+F8~cDs^~KM{b+_5CSang{~pFu*`w2Yw!mhigYq@)cRst{ zEPf}7MZdTYx*=#=4W_r0!NU;&=MI4itoa9<-u z1hqQ%jTR;u=PMRcP(LAz3Y9c0MbiDI35v*m7e%g~eeegm)8h4=sRFW11XDBL;%VN& zZSE_MCg!hwUftNpTKGJG!7rwC`1>KY?CXA<@h;4cQs3BGF2g#p!clA(;RX=CfRq|S_9Gp1*6Qr6O48S=8G2F{NBi(n4!5G1HeI2|GW0BL&`Dt$*H=oS2CtFvj(YvxQ>b-4a7+L1ZpfZ+=ad@PE8jQF)u}>MTEYn(P9;3GDuKr`} z*XK*+{jNK;xoy8zejYQ#!*r7RJB$x?G}c(Z{WRCAhqL!)UYNvg0HK_VYx%9Oky?;k zhl&95s5k3jB|O?HJK%Wal8jan6E#OY;-E36c|d3oJ7z?eS-H)vm%4lIkkE6HA;*mu zmDg`|I{3KMY*s-FoxfKkoA$b%3h_%DMBKC%_**RzXDAz2fs08xpzBW>p?_5;mMRrKx_JaX8 zM8Bd~tAA416c7^@VOXJ3Z6Ldte4oW8Z+c`~vyz@vD$cCWHhy_IVFkHW_#*yJ5&8DE zI${l4D)}Tb2;IyJBggmqKMpU)r?`(71aro^psEF{ZihB2tZ?t@H1kSna-E0&vW;CoYthSyg zZQY+Fxb1iA2Gjm*O@fpH)r)+n1wat9@wFT?_Pv9(2tJ!&-MA5=y ziwNUY`ZkeCiT!T<#a3#yQ$sGUOL9bSn)$5CTD$!FGZR=*TWGwrM4#!#35gFvNe1NJ zW_H(t!1oUZt7^9-;<-}(YlpVuMyl-pcD)8*P3Oae?4jk_ue;>kNAjk*xcoQ$1imhd z7i}PKZW&(6_2~YO=l54-9ifO#?}Vko(%lVq$MeO9cJU>WNroGNC38uIAxVt>!L0y)4!MlNvT_dKcfnZw5lj z8uiS4)_(Bg7AArZt}g{sD}z zs%i{)z3j^W7N;Th!;$u*0L!E_SpSJZ!}#4pKviKr=Oq##hnxdIX3)pF&IKcwZ&&ee z*4#uV#)9#dTwIbDF zgH-ciQ6!&7b>i>cF*DS74 zGr1`V2Q+1~MpKd=&fV;;^2IG@>ANre8w~eU&fYKkF$mVL^?=M=s1K*F1+D`$N&$8x zc3YJ(<(DA%Nh_i=Q}Us$Oh1^swxHPa4;qW>(-7oz;b_&C2jL5l2v>0iT!JsH-6qd6 z)D=pl+OmG-N;7Vq$D0Y(^$m57<_Pza0lpgdH`=1tRwzl7nwz>}WH=Vn<2dAnKkuv! zSh#toy8F5f+da zOmWtf+a$H{{+=M?VW#7p6awBLP~#yu24DN3AMI>c%=Iyg?r%HmnfBCP)vpDj%%{MU zmi0J0c7B?23T0xc>8pyk`JO_8)eHrflHD@eD?h&>HJUZY@0?y0r&d)>O*K<m~w*cb`Z`fn`U6G#XQFrDhsu7f&;jHI=pCocECv$6Pzq_2nCa%n-+gkoOx2{81?ESm z1M=&mf0o6A9quYCxi&?AdddJ|ofwe;(Gx`MDcwnX0sGdj<=&S*`gM*mcESF)ni;ap zXo4xzT_;5{^g};Wvq@vQR(HI4ceXz)s&g=N`vo_ODmfQu4WlSuJ+_nEW-G6D%2`7V z$}lOT(5Ou}&fLts3hQi03{$W&;NyQjHulhBjmpfxW%7sgTyKxj)Q(BDu`fGws41q- zqW139)HTHIwOZDsJz~}$fj?YdX-z2fI>Z9N)j`X*zZqdR=bBfA4631Vb@WK4&$mH+ z*dVP3{v6lS1X7xW#t(dM#mb{6RMI#;9&Xd2lG4$!Vd-_oFYn#E94cXC80_}n{I~+6 zoWztX6=zCjCImaP-0yXM`g)Hf&LiUialXGR(7>Wk zLJ&>A(u6(Lq-YavbmrbbHkD?%35<)hsKrZQ@lNL@yAZB0fI3RJ~L(;i682bGss zOp%U{aQv(jP<*s0)}FRm|XwfEtB=R{2tOZ+}2;BbibFpq8Rd-?7zv5YiP z2rH#M$h83D7=(CbZo9>mttfrP5NNMuf^9gR&1K-cHoY zEqS!w`_x@t5hNeXoA$mg&A<#QEC%N%B`&?IAsC<%(rHz#L=uq--66JU=t6!Q6x&jR z#XQp8o||t z)m=Dvht8;5osrm=JED9rKk-U24zy?2NFm{Dd*p2qRY+HWH0duWhaPP(dxmiB2R&6+TUYb)w$<)aNkf~B z8U#QvU5QezN`W63x59?)8;kEFYZhv>YuUNIm01eXACN6khs=Z4!x?i zmS}U)dRLr)s^~MnK!dqED$|GZqz&0#XtW41V3;%j&)B9OUf%caB1ud~6x6*PjFmi|>pB!-V1Uapk+U!mwc# z-?UW==_SZ#)RtRn2!HZkN9j2Ha)?Gbz)wWNz&` zZz1bbY9@mN3s7Ikl9Mv&Ggp7@>?Sva54kNun z9LWo5R5go^?DGv5j+}o1cE#jMHRUgcEnsVbq~qwvdar>7dyW!A2*s&a2wF|>3~XND zMjZsub{u{E{g$}7UfF$c1LP=rokYaJL`z=V57*2i6>Ti@=0bvlbFU7H#Y!Am2DwQ8 z6L8C2^%b}oXS$>%o0}U$KGWcR^^vwI&&_{L#HdOrPR@L4(lY2twiA$=4M(kJTyO#bnD7j9FX-8Xgun#{hsZ6w zQ)qrk$1dup;`jP$0d?U`8F!24x#-W7Eg4|Ewx>-&F5RBP5br6_KI#;@&jJlK2S#ZE zM&5Y}HVb!^E|2ku@73fUp{K8wO8l6#BV?8n&D21mivQE>1x4~xY%5tP?C*r;C{RI9PQ-?lWo5ArG7}d{%Q$rK>p~U`r>2#M6nIMvf zZwegUPL0!oRd(~Ys=>1mcGhtlI3dE%P5fGofyXAi~PS~%56mzIMIH7?`F zIXXRe8iV5lqVmLdvFr$b-(%e3by{~${Gw$GI013*PN_8xSn|@ZgFmO15!F06y>1T} zI^lSrXM`NhrK(;)Zpc#7bRk02s)*t+U3?sgfkV=|Y(rQkFtVbyRq3Pp`RKLKwk8>w zDM+3jSjR#8J&uk`c32F~+*AIq;LIk*-~^nQ$obZy$o*H6M~2^-ZOU4Um}vf}TbKeZdoamnm)!ugw_+6-A(3;Eq(d-L`xdMp64+~c zW%tjk{RLsoUz?yzZ+-P0L%rOf@^4!gH6xzEoWN+X!oI2=AEiMm7t;QsV}$NOb!0K# zkD9Q?PXY?_O0$99A$IyGlVCRpn~U`j1w00{AUOW@{-nbWW*WM1GV<`58VXG%PWC?< zrA&Wilv4PYgB>7EM0aG@BoS3Q!MV|#bZ!dw3lCLa9(1U2ud%J1=^{YAYDI>63~*(Q z5L}9LoYNkQ^iT&)yWAw?BhR3eHflFrc>|JBdTw%)5 zqE?dv)~S+Nk7-J=rmtV5Xp$dklN$Ea`FKI;Cs%H_E$+**3l>P9J{dEPg}tAVyQTOP z3ItD{Iz3sK)|`_%2lOwvFVt$|dj99qRwr#7Ei5r`K8t8HjrVX8fo_L=nf&+9F>ol3%dxd|8{hZxsTM|2`NLUVYKXyb zChCA16WHKE;b#JOo&%_Oy==P)$Q zxhYa$L9~&4WVr>?W*G+SQd|{2St29x#dW{YRtVwTX|)WZV1DfA;@w(XOi8tCsX?0e zh}!U}yn2A72@X!?3i1gH zj~EGAgR>11R67OOQ>UcY92IhQ+^3POQxdsL^I;pqF_K<=C1W7#WH|Khkv^$$+TcEP z3}p8YPyK%gwmcV@yH3X{oq}D)%lG&GV$g}FgZ(gRE}ezP^=b>9i~78ggg|HcQSE{( znRv8|^Wg7sjf-BP`vb;e-7MVQ z`MurDxg}B3?s-lQ6q8U1vs9$ez<6?#{nYEbtBQ;dXS>#V8)QWI5aNYgXzRZ8vHAYD z>`iP1>(9D??V-{bQyIV3r67PDfslF{QO22P0e&zA+ z1=_u`N5@q>VL`%m_Q5xi{Kx-*Wt{7FI^@-{_h12TZOdJDO>oh=1iHN}bI0d89->7c zN-u3mD%g8?oqSbC>C$9gKE2C<>#GnvmRIKk_&!oo~s=G zX)KmtwHlo7g2~|h`PdtBTBd58#L*2;Hn$9#&g?_k+`0Ox?_iwO9TlZ+mjZY-Gx^DE zN#*0S_b`jCW%-uieu@cSG3WVtqF^5@JtX8g*xjCHsc$=2{Wv6P`jBI-MSot$X(ov+ zn*fW+MLmc%K$_q2E2X$jY9Le9%DF!to$eQSXrR;c5X?hClp^?bE){(7>m1SceLX@3 zC)cWLUbHT!LJH;OAi0>V4cr#y{r84LCo|(ddrGI_dmq)WoE_cT*OuqRNRj=03)TEg zea1vppzs>qQ(SM&R@tA7N%E!qI4a^{(5)!4mB8Z~lW)ilvf_93Iru`PteHI>rJ8TE z&)o2yMS3#y> z_#RU&B5FEh)H@pdfY+^KTX~k2ISG){ABGGvu3t#gddjJMS~S_UVjD3V(|xy>3od4j zV~6z#^Kk^}3U!rFZH3E?OW$ZRvlpcb;_rJUldIkEAxXYsq@}A?snd6SsMDLi?cQ8$ z#@1w4_>-r+_qVRqpZzQi8HJ0+D*CfR+*CK%)fUi9YSy*l6SX4 zlIBmPv`iUWSJ&D2h0XSTjJ=k_^Nv@2{O*b$=K**I@nFnjTlWuMRsWod8;WREe^wu` zPgw8J<;`M5rUx-(!CZpuWQwMFPE2y~nQeV1BCu%mr}gHo5vR;~W(ZdTV+o(!^~m7j zx$8E2!|`*h-|(~p`F95~7blpz=d>wKyMLNVf>57&3XU4)LUWqxT~jGkQI~NnX<>nH zx$%$hWa&@2_*WdsFD%KW;}xc5uot(qf4FqNW2Oaz+i=D7rAr0#0mhVN@hTr5;KjOm z8N+|dZfw<=+?qBj_~Xss9mb#HWI~~Qf&G`mxVVl7%*Hdr4O5KoNmd7JnAq%G_9n~^ zXTQhGDWhxL^SWdHn;)BSy*h&)S5`E^zfSn5_yTSwzYmGKCk$PG@&DdwC9aQE8Ml7! zz`VgJ!fWTzcX`d`#r+@R-aD$Pw0-x-v0xcwEQq3j4k!WwDgsht89-11Ql+a12pEtO zIzdrnq)RV>pa@6}JyN40y-6->k*q z>`-$r>kQyN^Or4SVSZw;BpYDT`d0)Xug1~={cYEe%XQrVo}Ygb1Lc$giN|`i1}P4; z-Y%6JZ#-mflyJuiP$i2FzG=IlbF)c!H~(LjqF(fk_frA*F4821|KPam@CQhhNyuzb z-_Yk$sGTU|a8b3@b93|%-=ps6tpr*}xYV(GWW|p8Q_xRm?Y=+?6JIw_m;&XK3GamM z+b0Io-sj@qDq^<#PxU0Zn--33H00(dM~*HV9c(^8NmOLeg2BwecF=2UeYJ7F#-)Av zUW6=QdJ~huwT4{$Zc<9?2k-F8!|(Vw#9|XQ+ZJB`8Yr`}dJh=6wwH=YuDCu~0+;9Q zE!6MNB!p9YWWL)@1TE~Ivi`%*zCMdj{uRc!piW<#+pA)%6@2hx+F*n5a?n2(tiH?I z@mq2a5W2A;Y_bryPWz#pzEdEO(f-!1!=;MH7PoqgwqAdW(vN5xxsOtvD0*;(FSEmnHXuh zD2$n@+J0SEl4isJ79J1VM4j!F0i7W(7dWFaLB@MNK#8y=tIOdgh!@ZU&Mujhkfxbt zthDWns_5!Sj(cm;IYT!$QqGAQ%vyO{V*0~sHLa^x%&IBI6U6{AKx5MRqhn&k)xg>m z#`L}g+PhZ`%~OiBzZwq)R{Amw`X2R$`At1Tmk(HDuzFZNw^@(|wH+zHeQDr8Q=k`o zV~CSu#A&wACVlSX1)J>Lqxzoq)M?KEuq4lmWTCsSat>vNQUT{teVg3)q%W&>MKsee*3% z@$PKT(h%Rd)qNq}PL)hhgmH5%SEjDcWx-f9;~G_1Ht5&Pye?jL%{<2xt3gr%(|y%=m64`XhM8jOfv#QWV%DAubW z8D;6WW_M@TCz%l@Uxy~j6`zc)eS||BP5cpoaIK`gblq(2f`CRPv6vn}%1C zqm3mxNSuij1h`LO0I3B#sCU3DJ_iJap>xA>O=h%x%4dTfV7TLPtt?;-J8fW|stUL_9z@`7harN_~ypz;vVHw0xu)0i%7q|5xTA_}w6Y^l^XCFl~Zp zs#LU{TdAwlFb)Cd<*KKg=Ir#3_!3pbn1AwZ?KWQFLn`hxB49}udWFK&|djRg*B1S90DrBJfo zg2uzjH&0J?XSEkMKf%$^_Y|y?H+}d|oSk#x30Hh$1;{G1-Ah(#+G*D%IvRB{1l8>D zLn-{ev;iG)kmF%vGXo4uIMaHaDZI`eeIN!6tb~xiWe?)SXFwVlEP!&d3kU!x}e$kD~0H^f&4e1P&;d^ z?xSqh6O%)nBTlxl2eK`zXQR5{CJjn~H&qaEFQ|&-aswAug~G+mcH=tdNntGc z>cef`k09f0B~;OXF` z&7>J*08u7*uk}~CEjGEt626rEA~%J2ygRJ$JIGkWB=Ta=#a z{vQ8#r{AEB3ZUD-n=+xlJ~}E6u;w6RvjemRcrdX5x^tD!>s?2=z$jnGpXb_b+BTH| zB>5At;yG6igGsQ56UNLT$Wc2zrjk>4bG7vVuKcwK5Wb}i98CY=&g6c|M-|WeF7B!Y zl7w>w@Q6Yk9MCQT4KQ2MTKmG?h8oYi>pGrpZFDGZuruxYR7KUp0DUoR$J6IJs~xWl zzYWQ9_wi<({Ot1&_WLi1e^LKWjGafEEE}8eLHd?iD4@=IcivU;FDl<;6lrs0KK07HRoYCt;I92$QX6%;PAZ%qC(5$uN3gM3`ohWip;81}8e@_V6 z$OeS}T*lTs$P7!d8u6Vu$(@BDO`0_Wzk|s6^S^5fxw~rnqMB;rxkUT20Jj7pmM6Q9 zqcnWo9t+O=oPjsk`z8AU;EWuSV0^@iUi>PcxFRb-ybs@WpN>Gl-cAM;X|O5pd<+Mc zph8Mi@{6v|%cRpxkhiJ|g`w>^gqky4>!E4P5@p6bTRJGVq-h5LDKkTn5g^~|1w`@g zo>|dN^^^kckWW}SC)&LU9%!h5_Zrw{jEfiEQPlxVWSyI+6_&^9AxKV&o;Yzi*XV*? zfNSn5;K?M@$98b)5+6GT`dU6msm79WLbhJNinPDZyj2cLKX-N9Mx$4oZIRG=hd=aY&TYbNAY8JaZu!Wf9LeMv-) z7yloPpTlG{S$vNWDl+9CJR>Eh2PwaA-Uh5rr_e7rx3QP?I`khmYE*0VuvK+*gy3}` zDX`I@DjUq|vp_Uai};D|(+KQEmM3i%m{;XoH=ic--_r#koNgIk$w^K40+3^pJ*{3n z3q6L-z$QLjZj|$Uxts#RwiRII+Kuu zo9Pq4+s)LA0zlL_(yPLCK_`_4L@l5L>VhivwTS%(B6TN;*VUi-LrH1s5j--%r3_w! z@)z?+fj6~+L%V_${==r~@u~cN7P-vm0JuFu`FDQ7*W+jF<;x&W4x=)!~FDlCMp*OfO45Mhz6tc6r_uC7c@7tsDJk@ahn3{RJwy93mI3 z+c;BZvPwjB%8LOZ>E*x*Hwo;VXH(San^%s?Ao>a?vR(A!J3%C3_Um9`e9;6)R zWa(AiIQe@n=EEMA^Wzxr)yy9#NQh>_Ijk?Re;wq~>%>xm5`Q)fol^VnB%}8886Yb? z#xe=gsdrT<3@!=%C!Q`w?5}vbJ`)Ns^Cj^Ab;n)2TmoU6KvINS(WF=}(4@Isi~Ov&|z)i zF`N_-^|V0ORTOwLS5mBEEgn<;o3B0IJ$yK&d}u;XglonDewyc7EA{b=BY{(8d%#lU zv(Y#7`1hM*g4@|1#y*kEi8UbU<&)X8?*CYTh)yz`(UtjzO$X%PfD zvF#49X{sI!!CHxpSSZ$Fa$D*rhZ@rQNo1XUV#w%N10G4I`UsBtb+*Pn1v2phBlr-wp7VImqO;?_+HFi6eCBH(6OHB5?*; zfn+4Pa;~|yhWXTtSa^&a0wG(f^VSvsU1U(#K7$ft_B*d+$HLw1i43cw?Fbag?*`e( zZKsyTiULkQ$BZvUE{OfdJ#7y-;bRX{4I%99O^_u>$Zd9kOl_7m5H74sp+}w zpyT+{Jtf_u+O^2DdIfRkD|jNQAcLoUD*v;LW3qIMhu+d)2DtNU zcl+_zumI6sj@eUs;-T2e5iekzQ#_7L0LCp!%};JS3};`JN4Ir+ z`@9S<1wSj$PEI9S<{CR+Q3}1M+;F;q)FD$gYtl{z0_esWop8if@8^iyK8{ghiErQR z+MVptR88eDpr5g@Vh*r%F@6d_WL{ZrD*!i=`RR|YDT}SB4g2PaVSXPRFnGzl96`PP zM_GP<@fF5~QTdZ&6BZv<-LARe)mCB>eD`#B#)qp_jMIOxTf5ua$NM@Y_ig_LL7+B5 zwyCh6Zjv{$?`iit#I_IZeOhWa+jlyOY~OF^^UKU_TtFnNrYYR|(Do9hNUSMOH|?fE z&aEmCN~ksWQ}UbE&T_NOiuUu)zPY#9#2SwZkz)%{SKhh!E-luC;n(#>6nJ6CnZ5Yl zD#%zxpx`*zh8q7)>Mul>A#$0kq2b8XV#mI47SHEa~F&B!ki};x5J8t|nyf5dh zlWp?gQ|HNT_$CnGVOb_S#ixyWm^9Q^kx z>JwisyUG_ReA2(o_xTn!cxX)B~(up#X!b7|2yWc>{AsP5s6VT|9fTR(xj~ zGy>m+|;6#n4!n zcD-(2nMZRbQD_!xN)jP&x`lOrv+O8PA>h`J_9Q6A58_@yrZ0081)0Z63x+#P|Cu3W z(d#wn`#F4mwnLNGo|Nup)kf(ix8w3b{n2iEjMJ7@v4RAleV*RahbfhA;pJ;{Sh9SP zt57}AxRxZ~+JFgW(3i}hG)v%(l%74u)e;BKT}+8;jUvme39KtGucm z)4*|L2hPdKM!U(%iB1vGkS2F}Z*yb;WFBL+|akw`59L;?o!dEAX^ zXI@-k>~L#p$?UQ7o$Ghx@V*EK78WgFmYM;*mX^kSL#hK4?+Dhpcni)(y4T66xZkI| z&H$~g#Ga_;JSou)U9)<0mgh)hwbO$Vjkeh{TGraj%Mzx^Rrg91v#D?hhXn!0hP^m1R1YqOurx0& z3x1L{1!06^k5!+^&a!OlOBcsUfUs52YLJd3$?$;cEU83dwFhrBY#q%4HO<=)J4`@K ztaaLB;fYFYG6Qme84%-a&zNk!XlJgo1}YX7PiIw!jJfUJ7Ji#r@OY;>*Usa5-z8Zg-)Mh6 z(HquRTWjSy+0r;)Wvw}hlT2Llyn1_^Xoh~f50P0DyxsiFIWTZaOqZAE-21bW$wi?z znN}T@Ei*$kXDjjgh4b~B&b4tn>Ozyef(7sZsr|;JufMKp*p zLK!uww`rkPEy)=fUP^f(#0NKlwyQuz3{~o-s{R@wSW;e9X68l0+jcG2QiZy#!8;nAlEG&*OmsaM0<*VCii_s18vL_jb6 z=@iq5*QD#Qoimcwf&0N-`BAnq3Zf>+8up}xTNlk6Q`xyIA%ZCRWIGH$@^lnMTTGE9XHhWZcOiDuob zVYh8u)&tZW6}_xmW{{b3pvVzQQW?be8d=oAi^)$mC_AY6O*2)93N&>nz~A3yJf9iy zx|dq4-RuiH^m`Ia#ly?Ibj)S`#0J%E*iB!=_-!b6kl*{F!5;iAr;&DS_4!+% zy?ZyOCZ`qFntgihkVa3Lg>fr-MQsfwss@$(K!j_F1M9NS;`}XTWiEZ7?3LORW<2&i z^-tprJhGcxJSPf3>lO~o-)6Sx_D-C9m8u8>hoM&3j&3&@^se61!V(hNyHpTNad#cen&1;%TO1b0X<2MMFt3o0ovy~>EBs_i$=H1+T|I^#c zrXfezsOFnXk^J2H5rtQsPl&RcoY`!I3IA zyirM|9zb)btE($5pnTCFB@A1=5n2vg%eU3XW~GVhUylG>gp^&8=^nk;H8eUBkTX7D z9`c{<&GQ&p(8B3!sLkAwX6JcXKi}GpX)(;Th~*M;D0Ic9<ej;ibJj7S$EQDr*+O6&x@ey#iyX;|~ z&|ykC9j}xxcz!(YQ@!YG+r>PWmUd)zc>%(SkD@p35Vmx6H$FOimr34$~X{ z+!=Cggjl2jz)(z_OY|v?_?Oeuqdbh|;~E}*+$ zn4wfO9TvQFR^bez)#>B)g7Ue}>ksO$ti;($RRc-XH+2V6%57w-eEQWMy{bWt!9qkp zvJY*STIaidrBa_qbjxv<-r`+6XYbuhpHc#vTEP?5>6(F+gQlCmRGp&@)rS{`-W+lI zOs?u}9IA;uu{Bv|VQR;0=XG)YlB{T6(|yM)WUctV+_-gRXjk)-vF%^(R`rmi`_@95 zSIUo`-SyG(=A*xx$d2ERjR)*0HoweEnp(1+yTQU(X}hN%*s@XY{IxOowpsG>ONfek zjT5@j^Jj;H-RJ9AV12GirbFb8F9P*htnfa7EZTx4-^xA8&5xC-*XYfEVL_RE+ZY%W zMx}G#TJ)#3zpxr&kzQCBRnLlI$W=0yrN7o_;gSnb)c09F6=ca6I)VSwc^b$ei+-6ylK^731KSg5z0Bu|%KWGa5v0$pQ~7Kgd~I^ztir z*^rAatB%@HyVkqMC;3x1=agCmJV`0Fgd}70kd@I>p~|g+p=2VCx{^@U5939mB(h&_ zO}^<5Cac>oSV9tFtNXfx>Da1Cbt#9zcck)0VPTNj*U&2iTkk@_djovEC(eO0vcfIC zM9V$-xWQ9@{Giq2!+Xe1<=#D>T;K+}^CVd>`;f*3=Xq~DT^WAoPz(Be@&|6bL^rY6 zQSqzF#UQ_#;$XJK7uh=62>_LA2AsRzcwan>mg_cRP(v$0I){iPC?G>cqC~UL_r(^P zxYg%X1(FFm5gLrImmo(joI<^%fMj9!>Dsd+WO*0 zFwzE&j*cMIGkxbR=7COqH}6Uj+S=w&dqJAjHno)%Vs(^*`)D zxjakvi%L7ws+D0v^kJnQJe1BC=GHwCYd&iu@ML2uhpIM1w3XU;A}i-54L2}xG)$)# z+ItalIY3>zCNL<-Akk~#Q>#?A)gW`ZS-c~3m`<4|2rzsGcOR=zu!>t*`ehhpd;m-> zd4eRgTq_tuh#?evvZCOV8XP~8uMBQyLAAh4eZ%@t)|~-%P|o++Wd%Q?34A~({>xRL z{q90RichIZ-Ejqxlv}Z&_rSoM!rzn0C7?D~Y#ESMKP0F&+gT8z#PBZI%UUdAGU-pj z#AjJC-x!$zLe5VLs&Sj@UI9jn(z%+=?bk27W=VR^K5wJh)*LD+Ti6Sp71|Go$wuXO za|ab4#_pi{sstUvhQGc62vg{l_}T8jj+FipkiVBc*=l}9ZLnnOQI>w@abX5F3!JXb z@Gb42*MgRCZc5UZKkJ57Ydp5RB-^gxk+q9+NLGCHLf@H_Qpz12wNe+?Y!nG}M{rFx zdJy``WmTTl4?adzFduRyT2?O^fD_yz85k{Q9E(9c~j zq(+%$=6fm*7~1tYG!<{IFZkMajB+IlU}8A%Td#L-7kknH5SO?1G;?xh|CqDOpu_0#EfOt(P6 zOv@D&B^a<(9XTJx|*{q=}9(khh)IQ$(m4EU?48UWGCSYhcV*awQf~ zX!I-a9@Xx8gqj#FtfLP8X^dd5QN?BFDY5P~UN1ex^yMy)~6L9Rfc77}rqZkonP0BQDGxTxg8gdCTs5y)3TcD9tQAbX+>+)J=!!3% z1PVD0hhKWu3DU&p?$iD1#KT;3oMtbO{=%5mh+lWLco~US`b66cJ)Mqp(6g)XoUo0_8 zw=o;J9)OXuX!GWnVY!&OiQad0Afz~PwZr`E|IQFJlH_M>GOOxB*KU^56PyXCiXJTD zn@(sWXWd2fhWuEaFk?w%odTD*$u+Qo_bhfcCLTROT$ahuw``wVq=sP7A6kI^e_mKh z(jhTZLn8iU#@Xf>I+Hnd)KDCI(Fzedcrs%q4#MxHjosFenkJ+0x$zUV9oP00W?fYtY zIq-FJ5~K-k==A!!*Bw?xp!#P#nx%!Q0-xs8H;nZ)aAtU$soSpX`Qw^~#Fomv6U@1> zonI|DyS{Gr!+yK#ce58qh;f4b(u(GG4xMYFSxqACrK9PM$HQ3(ma7U%1s?OWxY!OX&2cp<(z;gwGy&?&z!41r?rIfZ2$K= zwv2p^DH_~zd?6lx{3E}t@WhIx;LfL_0qoUt_Vz3N;Y0L`m*0$jcVcTPCs7rhpGIKV zVw39Iw1(TRLigqvT~xWK54-uqyTd9=Eqh#=Cld7~oV!CeEZ8Qc9qb2Xy?D2N7Ww{+ zysiG|pt7Mf)e`naF^PTrj%GOb=?Q^@H!wvFP99UPZWB(Lk6Py1syXWnS=)Jk8X=s{ zMxjM$FRtR3ODF`f#iVzt#fQ!Q4`F_`?|*gU)kn^EBTtbfia0NDeL3?Umxz<7L3@J!fJu3O>@u$%BDE5p`r8qC2V|y0}v+j~t?7~Q{7KQ!v z$Lwt5{9RLL3Qb1JhE2i@L;sHZJ9JJgBkCJ=>iXspUk$y?n-VyhGoO0<_N%VU!S>J3(64SE z&v;+sPu&`T-q8zV_bo9&IhNUha(#>UMEBG_-Mt$E{Z8lOtbo<_@8q`4#!T~*s1Jd+ zcYVB_0OId%eUnrc0U8QZ3o`Qpm@jmW81C-=>!;xjHY0B-$$T-*24~{Jn-zC)j9+*Q zrs2>&qE>$Us2k8>V&j|cN8z)=bsqCw%N;zGQ6>O`wT)k3HMECG%5osKPZS^%x*nJU zq?81Nl(L!s?AUgM4?pyN3@xdEdS7EYI9%4?00h>xlA&6sj=uhY``u{$iLK$Yzx64inJpoC7_J7;04B)(` z?3DC`ke-)zoFxmLSE&l03=^dt+8x=2;K}wLgv2U(wO*gSX0}CN^6av^1Fxd%&;mKT z50P9I`un~9iJI7}MBd&O*(q^{F+tHI*btDkJo^$pTw)i-a@fn99LWlUm-<(X-#ga) z9JSS~cl4yF0*u&G9%<%5VJX1E4l`nyxNcT+&<0)Z&K!p#R38h-Q|t!26OA<@Iuq2C zei05|@kh_WNEgw(m3*7wzqx(Lr{U~KeJc9rkoJ@zrA4xvN;X{%jSJP8ly1dUm1QG^ z#-btoSdzU>#%fzG-tVFXq1a{agMMTrqyZm?W ziKHn~qq2r{)oRQ=pkKsAL`HJaKXhg3r$y9NOR9m|!t5Z~Mh~lB>+JP8$mhazT8A8x z7R>j+8OJv>q|{Z-qS5(5(1uz>f(+u#b&0ZzI>r|Dm3PZvMc|CAm2*B7&-T7H<6BVr zVB`1 zW~$ua5~DfA3);}z6d~S=ejZI7|!r6B>9=1=aWN7=%1>d0dz>)1v`0&z8zDpjX>K-gW-wty^(s{IY-anRy}Y6%`jh z5aQyb_^a!Rfm!V3V~G&(ekr8)R_jEF2Qm(DtlFAC=E!1pJgEMh%}N@CrGOWp+11Q0 zPg-Vu&nu6}l{(`UFaKd_I8i=a*)=RBk74^{Nf*PcE0Xy2oDzNWI+TZ3)Q-Q9Op^Kd zrY9xMak9m5tfB_S(_UYF@8e!nEnxA4-8uZsaU7RgXPPT-SQ_u>wU}=Z0&<>?vd|Z8 zy6wEDJQ#7*f!|Z@Q}tEmQuft7b0|gQs$le$63+3EOPjS0v0;JdID&cQsfSfj^0q@- zWqAb_eP&~Q0;-aVEPapF7@=%3=uW<;uz6pixer{1IplF52846e8qBbzVOBe&@(OT?dQ1 zz256QU9>fRt266&pM!B&TFTfH^1jBbr1g)K$vq=9^D-3yO}H;}!T>OM*A@^*eW#SR zn_db{IVB{NeYKBIT@Bvxg&);9y1fYLKoI9qyc;f<*+Xun3>vfaBA?;jII!-__UDC+ z9G24MNEim#VPVc2fo9F3IAN8=(`-X zGz>PJX$hK8L4pTq@$)C~i8-MI>ri;Zp}vwFo~tbqD3>$fK`Q-zWR z8mtR{7Z9L4z|PNzZp0H`zZT?GaJd!HUD~P`(dNtPPKkam0$$A3|4{WR-Lq%UN;xJ! zf3*?*?1TRv0#m8MbfoTM&c>otdKx4$$!rCXuE0=n`@~(M1Mw11{rv~lh|(EmU}#+C zpR^P*u1UQySA`_B;X$dAb)qEgkc4SwLQi(4Pb^;+pN_JH3TMx3iFvjaB?}ZNO9X9N z%Q+Ix+9YHofsqEudzR%@UJIxaTaRqeXb(g-v^HxVL?zPmQaY`t(G{mr_gd zzkVB>feFpzoO?cq?p(btC&d-JcP*IULBt-n=EjSM{w&B=xuNGn+lUo$vj85ncoMcN z490jhR?k}WZtEg$9uhaX#oy|#sTz8$XUGFXTAh)EuAjoBvjnn`l$5evZ<<4ed*kk& zTtt=cc=cT9bNzu_qqK+^tO?-0-yiv^D*6g5BUYj>G4*ot0=el!Fd+Oz(TLy77UP2_AP*F;;I3!c==I4F!JCdb;5MC_2GY zu0TodF13)+JL8+G{s*@K@Z4fb63)#lD1AiBZte^d-N|Ki~$Rf<=b-HBxSRQG}F%UgC393J1{+5QlEbX z>%07BVg6^}W&P{x{@cB(nveZLz7-{2Cy$v~d7lR??WqZ(^^MOBetbvMS6?;xd)>5IBN!y-8nC~w!DDd%8kC^SreA!`f>J2E1 zia8ri(zHVhles{?S9O1g2iyrNvKBQjz;dzGv#=~3QD927Y2K?BR@UfD#0BgnVGaoC z;arjJh2p$~>8^He(jq5}v;dTb%M2sHocdAa@h(M3`@Y`~N{PYAp0A3k2lJH?^A%T> zU%fg=z-7eb-O6_597=o7z;wK-6%`Z)F(?4&lrC3t7m^A<7+j{u3itI0SF&sh(6Fzm zv$C^VC}|h&y_2-`4~nJxd}{5_m_5;*m>bzuL`;JqBmw~4*|Br6l4I}YT;w* zf)ih>77q2L(racZ_pCudy3vjRurfw!2Tu9C0l=r1e8X~<<=C1h)LC3A-tJ3mGZ#PR zGsUgHXd%V6FZhL^RE~Lb5q^Dr8&pHqrn#+;fTI!2gy$XxdVp$kY3HvC#3$7Y@7%H& z3qkpwH!S@Jysfb>tll_2k&AdODvsB6WHI+L?Za9cY^=t+P3M;H*Biqb-_*M1zPQ-O zOBZ-$Iet~eBSFUHNb*^|VLo!o{*D>qK&3}ByjDnX7Jnea?&CBL=qqn_MOwYaV#41* zKqtZUb|&bR%IGd$6)N>CX&Ssk%P-a=7%FbKs}6U(%8bF%)EBB@qFp`~EP3UK?m`a% z3|o>dqoKSag4=X)ifoc$(4m+vM%K+FDVmlRczrZSD49 zhu23U&fpF8_r2IBqMtKe#t?1kSi2Yi!~d2Lh#H#p5JemHgpz| zZ7)9pu3%<$pmc9IJ4?jBvPsr5A$@Fko=B=E;n&Z;VywdQH&{Cr6!OZ`^tL#mnzIMFF)3i#q872&hx#P1e0Db$ky!ixMo&=%7b%$eEpC7q zyv0^&wN9|q7fv^#QFV+bx@{n#U6vAHT8AEwT8ctj#S(?o{<{oR0n8gU9&ug75Z0H>%NHu!#_GzbVivpphq4b2WsXMZiJ&PWr?yi!)k zBk3ApZ`XTCB4izAYOu`1C8~b|2<;*VkIa-2hs-iubERyW9*7y2!66ML%svSc(@l{R zT*=7YTq3VEj9r0V8C{-o>n75xxa#$4dw=jz)?@Xk(|LuKc{(qzkpdQ*SSER(Elmgd ztUJp$#7qm|6ZUUMTz%vx$qtn-i(kFkEk9VD0-_l&L=AgU5eYySlXe(RgC4Jq_Pi$z zr!FWc4Bh-TD#LM8-=0Dr_K(7EwY7526Ej4lW+z;Ims{47y!5J!EQz9%h0i0cv-FzN zp>g45ez9(ilQh3dgC+G1?@kydNWU?uRYzep;lq#7o~r+RO?Q^gZLhENF9w?J-z=$W_Vj9maG!yr;?atF&D5_3Dnw9x7 zlPl+cVcVvAc9N~KPrl~6>fr8^sK}u+z>7dt-UXOBmJIGS)rmWrXX0ooW&D@k>|Q(e zi0WzmeHHcPN6xoVriOT^BL7Oh)a(|kxs3lb74V84eOI~UQs3O0OZ0pPs=3`cpYI!2 zP_~$dV(F(e*XWpM$mM(Z26+ZwRl76&8N1c3yp>^KOeSD8;`zt}+=JZf|1yOdI-sJiLYQu1K96}U zU;ZjFct32}2$Y{`Cf1<*tca6!29%*y2F_R!*Bk?LD`8wp%7t0=?r8RT|3m3IYTfzK zvf`D;W!?*%kV^3B)eLW0DK?IjT3D3}W0;iNI+haH!$W@>(SfA0h2kLx`+%_B$3L~C zc{n$sXlUgalAFDo!6*7Qw;6X$XH}B9v*A)osRWnPTct;v!9RV-_N-%?hWwAiwF?SU zDGcEWYue#QHK3BYbKCa{!09FVdv1sD@unL}S_W)v=zMu+{_R)sstZLX^Q$@D8R$~q zR?Ew?*B)(vy5@=nb1-V-J?Yo*u{! zyMQ0&S@fA;|FO8~)-V&ljxOVT7ou+NhDe^Hf}HvilVk(Nu7efCJsSq7)G@+48nh#Ew*yFDe*^`iXnvdBfBwJNbk@4gps{P+9r?N55?pz@sG z<4ahV|Cv~Gz9cl+6>YzV?UL({M*?F%O{~!X(w!@*KYETlcuoR8c|IU%E8Dv*|7GYV ztGk@=WxPrvZ0|yxoNjtnAf7OiDDS5w9}U(2a6zF0e$flf$O*e7iHTllKf;i;F%R7B zPCwm$N@9pB+?5YsVS8zCi?^^32=f{C_YV2#oDL+_I#?N0b9MtA(R@z)1AsAYISxB2 zY4;?Rf?3d#xTe_1`sqs7f;TNiErSy;Hd)97GZV5HF|aJ9h!dv%JW+r<=y`iQooxt0 z2DFmIw<)6-Rlgnc(DRd7XdYtE;6KsO{?kABb}O;5{WOVSwz^tRC*B-o4?ik5(xrf{ z2p8bOiXRJi4c+uOb)38{aCqgs^ZR9!`CY#mJqSyQ$-boqO4RukM|ZycHrIxhp2%oG ze8arBHw&LcL6c!%-+tdZa~(a~MMi=CX(Bru(j_jzUl{*gg^t$2sA|cMhuv;&{7X;x zS9uy0y}nD-@8oY!03S8*_TTks5Sr$52rrv+j0VGi9^TmM`9YI;wfhYX+9^8#0QBHv zz^2&^KK*eQTCTiBS0!~*FIs+iW$f7W+uqwq8;? z3)BKgQQLVq@5#T#STH3&&9@U5P3|*gd*pqG(Yy7;FbehaRPQ4X!nF(nZGigV9q`#K z#l0oRxld7&x+Q*~ww7^fnnb5if26(eI(_Bbx zpZ2!v(L9u2^yL6(=+HkuYTxx25a=%S7ypu#`k-&yH#VlIe|G`ku}?rJp)GQH@G5Wl zn$|`ZMG*&!Q!)mx6SidP0pJ&35XOTL6MS=fDpd9_ITz8%(jG9;*Dlg~z)J z^M;dqnGT!-_L0L=?dUCyOsQpjn&{S;7diAlrpq&}ET9i3SFC;-M#$Ms%wh$%`zjO= zu<^Ka=YL})t}J;Evp%KT5(*Oeyp|1l<(UZ+pI{BWm?}=gkcnqS`WESJu#!kgS{nskKf~muRR|EW*#1u$tfq|<0mRL#tVuL z9%uW>GV%oL`f>{KaF~m4-8DE|8g%}H!?$g(V!8(pF3HkwAfv zL$!N(UcP!N zM$I(Cm4PzCt!R-LgIGA{j?Hr_pY=|=J^B6j-_MH`@xTNJLWKc?w*$1TXA@F+OOOOO zVz|KARIao~Ac;UPA?B1VN#zkjlB&(@B4KfvQ^_7zUc8ubfPuE3jy2v2kaCw^1KW%v z4+&5=SK4=Rc-s`i(F&O#{CC^5WY@TWbero=Yi6g@rd~Q=_@FkY2*6ZU6f>iTbg3cNW2gHcDdESMiykUIy6 zW6~mZ7eM{~>|J*J-MRiU5XW6}ahY&)EU!1IGS9)@`3DIi1C-`(W?#NO1{z}P+yZ#(Y!R!yN;hE;0__FU(TJLV;-t0MU0N5STLDWS6Z z4L{^I;EA|X=O+;Z{cnEX@=u2q=JaaLqVe23&sG#J@@5oGmOF*0Br5?84;w$y_d>?c zbDLBRFge(CFFuZVZKc6;`ga9}#0t_J(X9z%jT%aT>RD!{O(`j{YTa8x%&784c5hA} zaHs$n0nf;*YDPe&MTNAdMYk5^=%Q0PW^0Ev6vv1#BA!$$uXYgz{+PN#jtUB-1IW&H z%&tv(l5<%`_80(T+VGOP?;7^Mcze&VCeyZS8^?m3aV&@ksE7y(sDOx+*fF4hROu=L z(v?u8gxHx;0S!&MNC_S3Qe&kbcU+Eh&xmtB-}}5j-XAk;8$w9V zoL9-Q*4o!#|CSAXOf|nX$X~w(#~%!}#U+XvryIe!4t0!x7 zTKfpyK&pi>{`rRcS`t#c}Ynw;-4g%E?UNJdf72sydJ9M*ljgW%=nWRSaO zoiek_U&NsHzX~8sUz&@h!kME&5l(G9gY4Qc*)GF^K z(TMWn?LXQo~I+#hxOF8Yfcwp5QhabKB)gSn*X!Fz!u-<3dbK3=s_M$cf}TeoXe6{*<-9+>J?B{WKjkOl{2zWo=&bmpuNIA1lu^VxkXEhJDY% z1lfkS&R$kXTINDD>hOQ6S;<}tUV8%9o2>#tk+XQ~I@YN^t}s@N85d_4q8>w8i1%DG zU18EMrihaXZbIFiAA0pi48^bJGF zj2991v!n9)dRtNj;>Eqno}>FKKV@$GF@2*f7O*HrqW|jp<MqQlYeQ9w@!*R5oCH^i=;z0&U6)(z@F+V#E@ zG1&DYO@R*gUOjHIy?K!(IP`ni6|v~r_`%uBRW9dNz4xVk3ZNdgBowwk-VKu&8jJol zuz0FGp!mzfS~oD(?mKh{dqn#(U zpfr9h6HuC`nFX{L8q(!w!_2+1AFT5_j>if|J#JoUhTN&{=PRdFeDGqgyJ-~Y?wGZD z(CH(T_{ojt--uAbUeRWbRH%O5P9TfbpH6(rUnOB_^UVt5uDEV^gC60iheO(B(Ozvh zqQD3t@9=fa@*F;%U+uOkEm@`;qp9tjYPyre{o;O7gl9*~0ry{4?opLm`wvUx_aw~? zx#MQJPVo-{x2G+fG;gM>@a|5;S-y+x-(&x&D%%UweH8|TT~4t-r)}^}GIdHnWnhfI zesCeuxs0lVh)QWM9yuDfnra|_;YiwK`H;6 z499gMiUxk=?8X~{nmIB0=0h#}?b+^KLCv3YYo2ukn6X>(y~)oDFKo>u;U`)uZ*! z=^3q0O@ma>p>?)x>N1g;_B^4BiV{Z~m)n&+-1JA&%j2X}{YQHu6g|qx#MdW8mQ=su zcG_p^O(m@>&5Vq~zo@GE-E_`+6^^x(G6qdu!5v0v@L~)bzpuh zT{dtfdXDLR!(*&7&CAX1EFx_5&8?wA9;ZFju|y0|gbj^`7EnG{!GL)*OMyMl>bgLB zJ;!(;W!L>Ob2m&FW6p>Sxcj3@cPn+eIto90o3y z9k~_^nywT&oF3L7v>BWM>AhYQEaLk=Lp*2>sg%&&v@YD)5XtW04!FmI3hk=wZK`%r z3$x7R%w|yo>y6^1y6N1a3?~&!Mx*$n>B-?6qo@IW$BtqRyz69(En+f%rxwtPL}WIW z@m}@jF28N2`G{X8so93))rLNMj+^vb+PCbDQ=M&Fx|LOffZ{sUlE+qmrE^FhrlSWS zb(iiUOK>l`krTVtXljcV+rWk7;h|_skD9)Jws> zwxEXv$pf`if)qj4S-#!cTsWK zw$)uRB*B?as0}5qnF^Ye7jD!P-QZ#erm~`N-IDJ8X4!4yoQr5p^o6pc@_LM<)e+Ng z9N^acEW|rBaU4cq?^Y#r`~&6`Q{wjhHPUhww`c-tA#q$?2sUY#6nJ=> zjpHB5=-g%H%UO5tR+$7fiusS65PmmQEsf>?w;1FO2w6*=k2utoQ*Wog&-QHsAETWt z4sQbC9Mf%4JZQ!d0w$?uvS;wXqLU(x|0WXq{0i6C%;MrRBnyR40C~>G*ZLsgvD`_2 z!Ir1H&2G#kK4gPy)#I~LYi3Aq`{==t%@xd*Y%zOHn}+DD7%kVfG|?-qpp1QM^BGrU zC{T@x4iaq7M6_e)B4u5+T{Mynh4TiYxEMA$vDqojCVSoxbO{4ye?6UA~GO-E!~Axo290oX3aX4X;7cqS!_uvV&uZ1yw2H30drEb z{;nl>{d9C22CE(t6-5cREkm;FP243_cV6H|A2Aa>L(I7M{?z$ra-vu)3NxCqF1Ncb z#ms5GBd~D4+Pzrz*d?%SnfolD5t;qA%#03GO=)iwD%j;cUBx7)A!bu&KM*(hi6WaJ zuz92D97Oh0oc3a(Z9KmTPtJbvaO>H=oc&;67MSXOkHh9eRA$mqBfTpXl{>XZzL)alw4a(3xd!8aw zLi!`5BrcDTWl})XIjkwSUwh2O3vxHZpX1))6QD*Y8BB+#@NP%|sZL5!3SwWrDlX^n zdA{#Lr%z^>&my~TtGhtjzp8_ZHLww_i-3XMJ)0|ngBf`RHGhuG3FQ=0Q&SBgoors?F@7wD0Yhv9=440upSRaSD<2%+D-iNoJTA zUf}D+5%!#mi4&`Bmprsfr$>ag1MT&kA>`#;ykK~vP^~FeD=q4QpPy1qakz;~ zXQHK`|BoVH7%K$EENjXyhDz9c*Y*Zl1WKYhZ$L6^z+IE}ZIQcEI2<@{ZqK-wZw`cX zulc9$zA9T@+Aw1r!^qkqTC^w4r5nDvWiD2}fjyacrmUN;71IG;mQ=&EF-+NGYPfp1 z7CuMG*lQx&mQvs-Pwy@;(!}S;-k3a>Z`Yv*Gph_3vZM=OhV0McY{YHucX$l8lVIA6gxuZ|E=>=$eGzYbWpb>DhSvA8Ws z4WpG;xOgTVt_PXVZ#iL*oua?6N=K{7tp}S;DL`TO4T~)OyvS`&6ggxTMGknE%P6{r zdoyGxAs73iC4zWl;rE9kkaIEpRPMChe95h~Lo)7zlTpEA+)>=?Mpjrr>Sv4)j%CR_ zc1W3Sou)52Bdd5B+>9-llF2pY)=|Dts6 z@O>PJw|B&w1v;0Hr7oYl4}Vc<2w&V&Fw~{V9ModF*Ge$`))TBamx3oTZ!=NuiQIEU z%O%S3u|MsW6A~f@W9lK0{L)hNv^`MLzuKLsG}!vFFE4$Zbe~D9;k>y44dt6-Y6DR%8}3}Z}wO%0gQpBZ|MbKs#Lp33mM+v!_r zgL2I)?_w?G(P^k*y;-O-JJ__+V@~z z-}NNi%;IAKr9FSdMC5CAed2Wm=DN&{V=j9JbuQjGX+&N>==(34mN!$e8SqlCUf4Ad60)d_4C60 zdekL1L32*npj(?xNRP$-D6(#v{SBwNp2*97%XZqUwZlVE>b{a0k#d0g=xd+|>w3&I z@0`Y%!scI^G>OV~B6RnWWDJRG!Qng7*+wr@)gI4yvv)8ON4^6iVmRYm-~2u8^ozw8 z1-5T(@wY@(aGByOk)5~L1Fc3=ni^ci5rU`C)MW9X%uM%CztmjaX%QnC)WoH0d4Z;_ zaFkPgx3<+{Fm@q0nwBX4pDZ-#{ZdC9>{T;I!CdGl1Swg}tlWexc|BEzjJFfZCbfNPi6<-FA^z~Ep zhFHTon`VkN`LM5d=GDq@Hr>)!b4(*9{%)tAZ!B*TN2`r{r6{VqC=vyKtf~GZTM>HRYbd!AK0f#a zO0EcZQ$Q~D`L5c6DoRwJzqk3#Z@<5hgO=W6EQxmeySQ@Uv zdxw9LyFbD?dD&G?dxg#y_<@%{U9kL$l^fr=%uN!^Z{(@M@}}Pxdmnuu%E|R_)zne= zN7Xdox%ILB^VBHcSy=sX& z5Te_JEF}&z+K$$NB$f``_uL8z_y-CS{t0tO{p<#Z+gp*}_zP2sa~XAmZ$CA0Ih2go z9r#OPh3sCVn>NKq*@B6hPDW5Yl`%dBfbXCeWqI`sb&MxgpO+UzLKQJMNN}t_Te9~^ z>7blAD2KkiIYm>d?J9h(25f1S>6?KR*Xd6;)Erlgy50R4WTHq@_-rL*p7VBU3L-2c zA%wyRxrn)!zc?0h7W7!TzUo($?zgYD7qSU)}649f+b8p^_Rh&g@v0Ds(T&%!F7_ zXZhSEVxv)R(Z9=@A@PSdY&#)A$VIX0wsI=EkcR?zfWNo!u!Hi)z8fTtV<*ab9teU< zItukg*88xdZ&-9?9=8{naf#4<_m!JHQ(*plN;sLq1(EDAD7hefZ3TpsoEJ)A#}3+C zxUXel!&9n7>RK=)<+!S<>GMbP?c-@m?)&8B&u`d3S^r*`MSr=XOwJe?%H4IOw}C=v z&#DV#K;>+hw6BPZ=!troXHU(SK0+cOdM1v|K}ORyo!y`Rr4u z-0FY8$OAPUxwCaJEw$>xEiejKtQAN>%ER@l?NvAhodj3k@~5Z)Yfbz2dW|n+!qE7F z@$UFN{-gGTsaX(VNdNlvfY^KSVVFN;JB3iKKz`_@}#GImm6bZ_qAWUdM^BME&TrMT$qJF=$$tX zJyjE~9kG}%2j=A?v&{5E4qGWU&0XbVoxb!BaTW9Txw0T~hDuvF>OHpo>=tV@wa#N@ zViW{U1pFh&_6hJ6thCh^fmXOd>Ds+)Y^9SWgc)xMK_;^;9e{rG=5j(MLK3O1AyhmOZ=rR?bFK5NHih z3O{U8Ynag*i(AM@d^BWjJpO^=Z3|M0alUn#W~|~q^uLn-974bG`bb!n;osx3jhU@y zI5235v4TNCjOe=WR6r6I$a~*1O*+-~S&g8O&T}?D<(sWZQIv5n%Bgu7lGh^F#UATi zux>sKkq2#jOFDWf@Gs8h`1V|-$xH@z*V)3X7-odV&~cgTPU|I97Q23IjIYecQiLH> zknCQ+72PIK8gC_AraUU;=HNjDWH_P3BwstW{H|kV|5}0mSC`K=evtWC)wk4j;xxbU zOuJLv%wf8y^Q;$6=;#->9&ba9)-((zX|Q*aPWoh{;N(^NI|_6AFtaCRsD7Jm$3yvT z2S=q~#&-%rap_Oru{7|27Ezbts?>~-><HC+M9ZfdHfHv)gP%M}hCyW#SS;+i zXR878)RJ3PtdY}j2?-t{&GC?NgxR>Z%(^kEn{vY?`2bW?S)dh;R^fn~x!XMmoAVni zP$+bFz9U8}iB>w;6PrzP>YfhWV1cFGO#6jxD`&_o+;|_WmyESz%13UcP?Mf=H5KRU%$#lk!uuP2(6s>+$y z2q`(pk-cq|Nz_CwOg}>6ypTN2Z=V6VE&)(RX~rSy&=81`6OQc2cUG{r@j$HQ3!i-u6c>};#pvl1aid^`+&*j$1Nf!0;njhnCHbx?c<@w5AQvep zWly;>C#b)x_!Ts}wWLo-{R`ypLM&T&>tZ34)a(4nhh(T(Kjso5{|+2AlBTbo*tI@x z+*oG*F=4`TH`=4O(G+>@bjPmK2)#6(ZxQa|?X_AZ_N`AQiWkBJ%)QM+Wm-{D>g(+yBu3QQXP?@*L~{j&YM zcK??z@-T@~>76h4;G~jX0Df4)w8EHNI6*w4vj%QN748zsrqf%{m`9-$ZZgiF;Qqw zeo?JUNrq4YlDdgMoMW8hlYuY|!LO0;{n<%qp3W<_dyn0;V1MhkNn)odVi-fmdjS}1 zBlZw3o3ik!T%|R`CVh{;NJg_wgWY5caPjtN0v>g=gL4_wfeg6xrRdxj6hrrTRg4yx z2o86h^xMqOpLLko8y9JB&0Ec-ipV-zZW_USl4PJ>@2d z0#GRK^ZaOjng+hu)gfLBWs!~yIFWPb3WmL+lV}>~Z`aOpZKhi`Ml)JL0mYDokO&N{ z1eiUHVd13L(YcSeNSW^hjq^Xk+wtr&{Vb>R^^rs{ZP=5R=x690#|PshULYXO?d-f5 z8s}9KNu3*TNt~UH2L%U|*yKS+e|c&=2?Ft=>u&Z*sI+n}pD*yd{T8>F_%~2A4(rMw z{SlOEUlXRUDf8<2Gf3^qfto09J$6;4ZE$C-W8_oa*)MXI28wRqcCZf;0FhBVddE&o zOkN+s!Xkm5Bq=2%fU<6w87y5iy9?sD8kQC3n>3cPuBQ1zBTq)csvuRpDeHBu{bbQh zfuqVdvk+ujmpfhG$LCHvht}bt9q8dG^NomS*P1Sgei*2wo&Dmp82U^^T*bQ4v-r$c z^Ew|mT}eTlt7l~!urls9Z$3-ala>LLAo~`a$eS@1SFXGO*U@Z4FVB$$cC2yU&HF3L zKbh#Tcn;b(_%KE|7n2yJgL!I9KYeeu6B5-4*%y-QsI<>zHEu5Qpz}9b3|{S{D13A2 zlYX^<#o)M`bd9rT^-kS<1?pCA&x4L2U_63YYB!gfH4Q@Vp&o@9qV8@q%%&&jjD8cX ze-by%cgoMtFYRLEi=&fW2O;?r665wK$nFA(BoG_UutEJ5zhan{^ifo)ct~yY$KrJE zUh%g7{HUyj)42Yg9M2DOnkF}M;=kxmoc)T?hb?1tnww(ZAu%Gqk@q}l1-ZKjU&WLJ za<^%H!@#}ehfLy>PJjsDjB5eFO4h)`$Ez~+km55sULC%F~d_PzaF6aRm5^OK@g27tOyND#LJJaZX9+|Fwd%oxR*NW(G5^^97IHC!Tkt?THOpM z=TyOSvDB1*m4=Ll}I>1l#n$Iw{=U+BRzjgr#9Y!b3eRaVW!cdVC zLnFQnAZNOojc=74}UvMcvoC7Y*is}>mZQ%WYPO<~sZYW3eFx7e5a2E!zDC3n!Y zSwL6XvUs?@bmt!N#Ch>rkC&#Z6I~ec$16^huYIvnOpPKDo?p-XI7bB%&xu<_r7=M| z<+{Kzi_sb{kpSG19g{>3f_za}O=wnlyV>54tcHp`%h)8G7 ziqswk5)tMM>ckQ&&Yhi~1{Z{hr0aPL_x2rKew7G(wMY@(sSk5RZd;Gx*kVZrfO)^@ z12C^G)&=!>kD>&bJWs`h))tzwtqZ#DDJ@Iw9?yfsahoF)$kGw#6)~u+>t|3=E8QiCq*o}P%qg6f z1w9vA!=d*V#&jzzDo7%u@F9f=06F)yc*vVW0kFrF%(tUPL1%LC^gt{)mt_wX7j zkF+`(Z$W7orr2#+epgU^Zo$Fckk0FKFm}T@AI4Lt;iqT!0MTj6+>Qc zGtKX?5DZZ>awO?_ENrUnjB5TG&h@vZAc8&04a|O4nArWZpuxE$T^X2TR2h2+b|g>S zd((1-upU|sYaw{D-X%BPxzdzQs@7l0vkVfD|0D(m&vGu6SG_Wu>m6~~q&&2yB~sR^ z{CSz8Oq|OZVi9R0QH5EuU3ET}a+se2m0FX9%{t}bf)MJOpWC{0b%9n}$-dkn2^$kRD4ES17rs{C4@w z)QZKAf`rEwg2y>VPEN3~)1Q&<;BtKYl*j(y)?rs1dREIi=FXVKJ|Ma6F>RFK_xd8d zeDL5;8|n|U4o+_)Ri&^!u$V! z!v({+4mgd%b8|mG)=6>ahZ98&_r2Yhm5D&PS)li`Eczws##eKXeUV*1xJR`KkGoK# zW?tniHg*gcYO5B%CdX2p64%#V0=@G zb;YIg@m$~de~rGo`-`L!j%KrWrD8q0h^Wr&2&InsW|fgRI&Gx%9h8>X@hp;79dTSd z!*0k-EhlaVWmDX{zts@&Ka*xi;1`ieVxw64f7UjwO%nKFR=*9gFnld+1Q`bX8{qIP z1(sSoU!j|OCs-F(!_m~34`z_6Ns655@<^!P`Xmw}j$L^=%kbQEcR2)rmB*?T=XMgT zYW>nkgIq9<6xqGr3P;q)r%0x{} zL!2A3tCCxKQ!B+oLo{ivaQPo6Qh)0S1)fk=YCBl{As zyKME}C_Ltd7FgO1+RG3%?3be;eJlex>YF=wVF&_72`eS;B!UXFWS`Je-DPY3{wK<^ zkSDu7{c;fbjlcRV7Y16W$hQjzu0kHIO6o7Mt0pC$`rII^t9#rHhR*bak*RLI-0Y*S zw79<&j)vMTnykQ&`hc!t_&QxmvLX?W=!MwJ)fjkdy2v7}0+ibgh@W0~d?G49SScn0 zyNkQVRkQw=gKbEz2Z>w&yH2m%4ojkOrOa%Ld^Ib5UIk@EA^HJ~1Y6v_ahRtQF|iZC z2Ja}KMoiVSy%wyzx8O9n54}7lU4ha-ad5Us*4|kkar8KTn)YUVGt87#*~51o3VE4n zI`J|6d~+s)c}V$0pIdjvxY1!W8#y^{gi-B5od$4ah37 zMybvY%nRS;f?BLqo`Ut*DFiU+kxx%ZtToiYFU(V&-EgT{ohtM9SnF;o5{Qx~&JL;% z=CjH1bf{&~x$mNIldd$~b6KS&rG);f@UH4JUwYOw5^b9nbWZDer6|Z~m3 za&6N>aV6150XpMU*1tqx1(~>Eb?IP>w6lRxjvzJN#kDJ%Z?wv}ayQznL?u2R=BztH=o2zZWnu_Awm z0AZ}+{Jw<-@n28;t&vqp!nB_vUXwQ=;A~xb0E7sWm)ioyE&fH*-8tTHf%W*>^1t zx{q~#>tmXuCEqZlYKG645J$|;T)BcD9JeaeDjDmv>PZb8hwS3H2$-Bf$3RoS2v!u~|22?0hdPII&8c@2x0_8k$`>T2XJ( zIyy5=i~&Tuso-HpM$vgNTkcLlzcXnmeO#&4+=f623ddC};(^{i;T?9{t+*IrJ#Y>zy^aslvHnIJ7ul znTZ6)KpPZCNNk81-NqAS4r4jz{pjNO!HmvwOOK?(?b!SaNIea5HiAr<#Gk3N7T5C!!6xCiS-S!20b2gzO3-O9?Q3i_GJX<5ZO_g9}zRUcekJT$rw z2zXC|{5BjPk|J35_BLbvbp^)f1h^3M45GanaV4)jA5f02!Ha~v{~ob224xeU(0*op z+mKWj40Bz>?zO% zHFlw5pILG6jL4B>Fi30Qq2`2mTZYPbdeVVu8)jCLY|NNQ-N%i8`SpMhYQfJJ`amQN z_EN^*-BX6w_HEnIF4{be|DPL-#x>bn&%mJ#Oq78lAxH#${kmO5^tklbP+eK)@saWh zi8SWCS}`+wyFxTwFixT}{^XxTx!j}tK$I)aw^LUa*)6*#2^xE-kYpA^uh}AnAS@TF z8STE&G;GH@7tm;0CqwMT(2()$!+0(~2gMCAT07NBnrvVAry$Z)q%hOcvMIwTEau$@ z4TEIpL<%oRGb&33)29^DMtyhBxroq_1x;G#aQ%&qDvr_+TSTMLaMFX-N$+AzG;}#P z@5|!EZc`YTJP=nQ{f}dD*Xb9o9adp>Ba^ME@Q`+G$w^E?gAUEOl{1s@15HZzgBWaxXJ51_# zqf_-|&uC419S^DqY=jbz6eeb=8-!%jj9Y6!dUy#w|1_h1la?forMiY}OIl^TD$}`8 zMrkQqC7yr9+IGKORRjNLl9`H1TZ-b*{U&m-IM|7f$LDI5e$+vruN?wbJE08*u`$>- z1q%QWFtbsHKuP;9oUEvrX?z_QFK17;dHDEu&(^R)dA3A)Erbg%@t%joi;G>DLfZZge>ZnUyO!sf&;e!2Z{`|@ z0P4Wv{4rMx)n|yq`p*IDZi;pE__dr`+Z82D*D2H2BS)+hoU9*LgYfa9DN!9ri(1=B z;-7v09K!5#$u=Ljf6R1?SP61rp$UfZCS+X7ruH{lRx-Z4-VgyFOg%rQ-4U0;te&lP zRJ4k^6Y|{5diAkh<7~U=Vie;JtbPMEljoLLg~XANsi1^gK5uDiT4Gey-p;%@C&$hM zd|pd=7A{BK(f#q}{5zliNW^pCJlTI42=^+bJc z4&{9YE;2+WBizRoKYPS(@#*7W?g}uuUIWj7GF4;a4P&(E3~C~4l-EV;rORmEI$4A| zS5f+E_GX!)Q_chb?P<_uWB^dl{=+kLrQ|SkPYqFXtO=5?i5vHwF3}p;WOOjbnkZ5w zpti9^VPRaw%%V8q?WQ54f}b0KDjlPKV%X^t*?Aw;jvb;CXCn5smf9}OqV6Fi0H5dE|V2d3rM`HZ;HdNIeK zQ79e40{*_1rHBvy-I;*aM|aQIPBgXRgGYSPqiwPVcvn`PQ5mCwz3m{&5&1#Q=%Z5T z&O+`JN&Q!ixpcMI{Y|y;l_}gOhWS=hX|zk;UqVR9IH?J5W$y}?hYBJy?o9cD1ycM( z7Fnon*X2P${h+(!)zg}Nk9wXJ0+F^gP50!tb|gn~ks(<0X`Oq`OW{DS$i06Jmzbvkp64h-A~XpC<1`B1nn*+ERO# zdO+cnO&&nr&^4~ajylCyguRA@CcND2?I3%EPcZXdpKKSh8lMo{vI(-5?Vmpp7!Ko= z@>l~FlSio|Fa%JA$jg#)wof+_!Da$|)%Nuot&tQupZ#P@k!qozGwciqx4@+Mioy_t zt2%?q9!X2~d2Y-{z8~o3dG?)!KpMoL+G^t~kV+rp8PI`55TIh#!0gfFe^lupts-b$ zYx`qF0&;Fi0R-PRStq>twvUxr1p(Xz0;oB_FgCWRDl~3Yk2o-L5;(TnP)<_gYT?H_ z-U>7^+pdN(P&&RA$EvW`k4|LL#L(-g?a-^HFNXfB7O48HY|E?TLg=Q=VHT;ca9ysD zEQ90@<-ZCb4#ZfY4*uVxI`f}`$Vc??_Y?r*n7yDZrNNLSel%^SzID2ONC?RSfnndr zJaS-D$A_Dvf{OJ;+flptLw|3BqMWmMr_2kdQCyez7>g7C>HNu!hRs{1ayhkFrSrJh zi$^AzQ;UN+`u_hX!JOZ#Rst@fWeQVaV*^1M#b-BeOsJnntF$}K7LkgCyv;%?R>wM{cM?2Un~Kc^ARJaek6|ffVTs z>jyw=;aX0R?p6N&k+~|{&x5lUQcSa>5TRo?qIsn0rPza#T}}r2A8Q5zmNs=$UJs%! zZ$-FffA#&iL?b6PWv?hF0HArfdtZc}wV+_()$b0t&Q@CJ5!@f+gLJ{>@TEh#-#7P= zmAWmJ7#n1i?|yfv!6cccG?VI8R}{at?{XWTKZ-5!kMPTu>OCI^ol4Ck3lnh_R+X7p z$fO?Xs$8kK5qaM(pV92&D>*2WWM}0#YaO}U_OAd?3RL*ESLhp>$KCZ?53&t(jY$*7 z@KZBdnol=ACQ!zqBEbA-xx*{H_9Q;xTh6b*0~};&ZnRcITSl?JU1xHPmEg}}gAQ4> zM>a$E|3U~EngIht269+*)VLunPhPIngm4Unnz}FR>l~Yv8w=#hYu&SadM{4hK=j$w zr;Sl{kWtKnTaw0y`qa%EgySkjY$@%Q>nXoH1&arq#pf?84E=ZJT#o;rIhbaY5`WSG zH}3?FCtI9QwW$~aGWz^|=bISkpMX?+yEKr2*i}Pw!928&dU@W^OxOf^T!t+EN zR0xXF5%vnvse)kk?fFIX81;FcTc-V5M%$juOnJb9_Gz3IFw}M16qa zTL{{pTmU?=D+@d)eqy~X;mMrjglU;bi=Zqq;Eq3LzIYajdO{KsY5wFghl{ZY`j%|@ z=%mKIl_x81t#_?uqk6oNT(n^J%^?$u7I7K^H)WQM z8X3%v{^{@h3VjZYeX16n#nBxoqXKl1h-X|^L~ol%X^EJJ(j6aCY|esy_V^LIso`Ps zP)8lQ$AiW4jPHRkp7kON9T@Lsj_g!|&?X0nt3+}L95+fQp_}jdE!i+eWWtdy_k3Fu zOp(aXgZ1~B%f?A8cbkE^<|Gu2#{iyD7suCsa8l85`$TuaKIYOQu^ESFgOd|Q-F!RJ zD88yrMf3GK-0H!Y0o;!_TH0R}viH4le)zKdnk(&{bEK2Ubcb(}dxXA9A$-)MgjUWv ztXTeJ&Vh9-gh6Y|mO^A4o*iL7ZV;W%8uR(6eChhG5Jr9C-1&Wu>f97(6KT@bLFrgd z-!BVa#SksYeb9GDVX&iogUj5M&?q$7@CbTG59yuZDf;?$L{YvgQP zXqziD#qwsNC|XSITZ-i?xeTUp7WW0bezI%_+vdR=XT`a!-h+qprVh=bnmZqiT<LADTG zL>Bn*jYIUp^jd$z<@xotegP{=u{_sBF{^|5qm<4y@?0AJwdU)%`p1gu>8;2^6d}(0^5}{s~o>$)Ryr)|D3X^xeim}H1|lzv1FnP zf-X$jMS+*9ORn?&1a;%7!VI|(QG2ON=LCN|oqliO`SFnc{@Lj&HBA!$ru@Uc&u>-x zXVr@ms^D3EgQx*wt#O&W=yRxS!Q^e+kp@A=v#T3kt7~pRVj9Q=1XKaC&4kGRQ2K&h z0i*4U&lcJF3bi~OB{H9S7alt)Ls6*nJQ)FrT&Ed zJO|W@{p=HddDmHL@x+5eqo3#t+nEP1_J1xpr+pIY4I}iQyX-?lsm8VG-;YNqx|MdK zT#0AORHY$H5DlZ_iTkX5hLTx5+=b=&+}Ar1=oqCOnV1Kv%%yjF`05~E5gJ;pl@7~7 z6-rO^Ae`X}Q&i((AE+FFae&)ldO9)`p#`*Wsxwk` z%Ce^?DHkEvm9toa9N>~MeD)Y1>kl11Fe&F|chljmF<=r{sW3plx@{H-D^M)9r#1vK z4A>1?b`+;fp)mfaAvyc?ISW28&S#BKEX2?@4Nn+%&~YsEcu^JA`*iPig- zqE;A9-~5;9`$cIm{U@8oKRsyGxgX}&{S*sd`E7C~;?2HbETac9aZ zJYqa>ZAdPK5!q|Cd(WQec8`)7JNaw2;3jOF1?Eo0RJM%3znJumotWK^PWsQS;o88A zeZN_GXY$tO*YK2n7n*;VZAlSE{&JPGntzG0N6y%qbXq4X-%9vybaT356>F*_h#&}! z2JqttwqT3uZo1Veh0hdS?T{pKpv9@prl8%aG zJGM)^gqdjy;ezz;nv7nn81wWhru28t)^Blxk1H55OzGvJtsJeB))h(3FI?D%4y^^J zUP}_g44;5+H;)GwC~D{EkI4n9A-8EkiVEYetnbr&H;48!FwIXjiRj7r+s7ZNaN*|7 zS zJph4l6{FfDnipUcPvG#bx0`4RVR4u!M*R>Cysiar--)_vly%}0vJ{+DWx!Xc_Uj?@ zHSJ;2R&&P37J|M7D!i)>Bmfcn8t4m@3`+$~);60`|GVYzfz~;aA%A(ukvmi;I^8kY zLia4FIe+u!E2mV`3qUWE)Z440FKMU^-}$ofw}!5A0I;Nb=AJPwxZ;22v6lu?nsk(Z z>)&~YT-x}Prz7c{hKB7+iz+9UFLmk%;WJP55~T*vYi&;K#6A1ih9 z`k@I%Ykt&Xq$x3v`}#O=@)fbn|HKY17BGKIIh+E(Sxs{HnNwgiDt;wA(n~3&0n$l@ zeNICoXkuI@A|fJ{uU9Ay*aV=eG(#g*c+}96ZwsA{BC={OfjBTSJAs;}I;-htpHL(f z0D+IyM~Kb;+RP`0rnWh^q{>^s2&EGO4B9tmi_j1^Sxs-Ty#NU)lvn=yu;MQzc<`G2mjl}24n}j ze%1CeB05HTE7#HvMdy<{!Yy|&ui9_2?S7tF@i;meigc}v%@-lmnxO=XxZ)*z6iw5w zH3@n4EFmG`YAjVl2L@}?2*ixRFJ+ztWjD1mKPv(mP@!N8y}D2;T;toHF%im1zEGBG zQ4yFxQRodDcBEfF)9&!GxH_f$vO@<*Y2A#~#6 z5Zpwb1%}^N%B5;)g#~CVgSgyl%%#5AAaOT_zF}v>av-Ru2U?dBMAZW9=%pl;+KfYv zVoI2`1HzSR+F~g`4CyU@Pz26;3ABEktDRqjUJHRV8i?2_-{EJfj5R^9 zaD|?z;(;%ZTt^c5?LR%|-{1A<;X|F=io)c7RMot?jQs&&HXH}rL^(@jk&F-{`=0kF z6(D!&S5cm*f$6FH+^K=*9)XpRn0Y3_k8er+7CJhw!aWywjt1;}1IB2}^t@@_*$rkc zBVw$DuYuuhg0oj*r*f8G^~<_Z(RF06MDr`ftFJMmobF?Ykv!EPAF0Gi2RAmw-yg4+ zX8ky3m~rO;-$>;Vzo}1y6&Cy!K2Oa(Q;5ichqP{N*boPWaig`|jF(YspvUcf8Kbin z33ur4#l@%Ur(6xU-RF*3`|2c8HCVe#`L8;fqVQ&jI8r~{7M0_03Nco=>oN+IO;rfS zcg#iIal_YlFgj`Br0_$phljbxa)1`gn27m4e_oVt3mR75Wpj_EJhy(i{p087KlA0A zVG0i^HakFO0TN3d#?+rn*?{#TK)R^&->7Q7g^o7h)#Vg(0ne4^(`snm9+JRJs%w}Q zqTWVi0l?)Tg~pZM<-{p zmc?`Y93N*|R3QKGOjpES<^5&Vg}t5@AO?l*MtW*s^lx-tuw55OL}F;TJ#LW=XSBLM z0ECR)>yPbnUlZH&y-7=u+yl~3&hnpN0e5blprV1y`fZ6HGz>L#lGtJ?CZvn#CJ5Lu zpalmh06~86sM~1XZd>xg$yB|*Go)e>Y|dGkKw$zP@LEGNN}AZTOTcDAc~Aw?Jjk($ zVzq6IXs|)^>gB61N9+8J z4f85s_D87h<9K^Tk5#He@jX(i6Iv+WmL8~T_-M#q?(==Zv>ww>-gDG6w(DKtBkBD& zdUN6{ecRh;B}n;_m-k!V)G23!4A8IqA(u0c^wEGf35NVf%3%;s=C(i~j@;J|(`!P- z2?^JbwwY#j_K$5dVJoJqT`dCXd}%W?J;o)zL6U}&HeK!p5aDaOhZcd$_k+>K4BaI5 z;p%Whnm*PJ87%oT|W$lNz%!OqsPQgMm!xV z5)u|pk_@Ru%6L?tLzUQcci6LM$)KN?N2;vU(b0A5NDR9Mt?vMi(}ml|wp+ehp7kk2 zW@EQ0ra2>vZjmSwRL++(A1Kz1ynQ-9SsV_ku^>wba41@+Q!pYFx>mxSCIQ z=R5RPQEbqFCwtI@`W2pd=9SZr5VMUdOr5>j{`mc|cJ`IiDkvKtcL)SLyDI>}o|fPi z4DCTIJ6+>vR@SdgJBnVO%0u)BJP^<%p;=8dhMhAcr{wtTDGc}(RYVlsL|nX7UAEoy zMM;9N3C;3$Zr-{*+CxW4lW-*;%{OG(!{Q)X(yj{^;9Us{`2QzqwHMTX`O?n-QXqU_ zY#QyLU8a4?*V6IYyY}73J`vo7=+1-cnwl5X)gRiFJZ9I|1WP1laD6qcTRYc9C^^R! zjDJc45*tb7!2dA*=VF!NewzTrE4ik8iiSm36oqDIywOd!or#7iI_+oiR+`ZTAO}3% zI50iWd7{hQ`R9;7hAg&_PgSsOkKrIDCurm}22)syb1c1ps`YcSq2(@J9 z2_WQ4U(u?_`a;Mb2hf@6MBb6`18&Gjq4y?6c^Px~?UB-?vsw1Pzc{uh|0>p>L= z`3^;89_W76lA742Y_98gkocz)Te82Dhu%!9mc+FFXNvo-4?76<@&wxK!+1?N# zw|Z=6Wp*mJs;MIbob-a|w~*u}qx+D(_YjKiRS~_J@GnKAA}imy?)*=5#OQfCVkx+S zpZ3)B?DR&F(IXh&3I~+0JuRrU<@1K`F}Pb1!UFcC6?a$4^Z+17e%ckHk+r(Br3b{& ze83=%v30&Ja0PKY2mct$EcA65O7w>;oC9Dnh>ihVK)`dkW3P*eIS$ZKM-E{WCA<5TjcdC$j@&r z@X{+QZbUkH7OAQdX8r@%48CD;OFKY-;Wg^ws8q<2gWf;mD=2=m4~-1^jt6tbj(rEY zgBB6F`S^xky}&8lu6;6cXL2)Vgk@Lk=rAbtX@;{ggYxsO zU!qR3ZwZN?HQn3B_%lD+_nfau2&`xifS6~Tn=2H;{wqhgY3cOUH+8orxBe0$6qf*P z!@CFeT6oMXh*JNc_ia}Mf%dgF3UgVRzk{;)w&M5-ryhZGjq#%X&$fukCv?QkEil80 zzf+LP%UpjRkUaP+V)gN4l~e%I;s8rV@a-ANQWKWjoU{5**dOCWJ7lENx%iRXHb#t% zib}Zi?>(BS-qRCZ3W5-yfNc3fAXdOB_EEe&9biJHipj3m#lcfgQ2nLA(OYMFMAO_l zmbPJNPr=}1CKcQ6kJsC+_AQ<~TC)TFY&6rz*P(IX(F#^bIDx2^fesGBnKKozXJw$L zwjFp1Nzuhc&fN!IV>$H8v&8ROU?J!}M9y_dG=D9~j@eLgCZS)x@11d429nsv*`U@u zKl|+nF~BR&r>-0MnGeSGhSUFVW%+Ws>pqv{0kgOHRmBg;51xH1o{;lrKgbXKb^!}WQ6`leT?Lm)qtL`l~+*0+8_ex9~DI3KFi*%>U7D`-1@gB>w^fO6@07@%H@Wt%U8a00?9s~_J2zf$j{00YZYh| z)g-R`JeXhq#f&TXBp4?m&klYYdn9`Tgw2R&a92Vcg5Rj@G!$J?qG~={jl8c9^ZTJGfr>jsKQHgr$SGM-$Vw z_Q0ciAo3!*}|A;W}JZlC!bZ8f}Q#{u{=%~FxR^F3XLuSNyyE5$Ax;o`L<>ACx+DgdGh#ygxe3h+! zl2OG@;htn01x%gyV2i(G~B+)k93OgJ(5;>05nI&4HH%JLTmfE=5o|itZ)SoJJ8*+@YsTh?c z6)^rP$Hv^2|3#~fwp!@0Sm#d8%envXp=QJ0^6TBfpzhIR{58aX7WJmp9i}yQ6tY+m z*2W$$^)X2WIFVzNDln%06N)sOXGUL$KYB%RCzG zW1hU(z;lN3WS6950n9#}MmPe$y!2`NgXn1U`QdsskN3X=uKRWP3EOx$P$W8Iid~}ItGEBKDl9Od)HE$Etvo+s#b2W zFJ8-QBMVK$7Lly@vFHX6_ zB^;wxmdZ&xOiX&5wYln z!#Rkg^b;ONwpje~v?u7foA)T67z}3;1H)?uTn9y6>SmT~^RCq4`>MTjv_N`IfcKbP zE7)+i0=I^gY8>^6`^=DoSaa zaRY06di5!avm$Pi+WYzxFv9X+;%HuEGyzq939t5>FmwkAjD}A6$f>GAL8^?^V5)ED ztvitc1JawsYtn272P;ZJUcgI4k#twt?t&oSa-HrR>MxWCkVm3;`t&(mPf^=qZ)pjk;w#Gx}WI~MF5#^eqkrd!A_3$FxbER2bTMBFtxyJlEjU^jBVh>*wCWAve!_DI2bV66y@u>kMrhH8vhGZ97OdgG zl#Fj>)G9$ADmPKtHa+pw8u|so4;fEy1L?kj%M);m^03{yT`#KkQ61o5f=vx=r2kS6 zJYI4wn&L8AK((a3QsmmisTd1+;TAx^c($?Zt7jhE5)-gNW_bfUea(#G6=}G7>yYKaqk> zV`W1IwI1=g@57beNU{%dw&A_?l@;f8K|OlNjKmhWt;qv zZTl=Mmr^a`GGz^|oA)wyHg`^7a{QfD#IB%^UF`%k^OJ_HAXa6|*I1QDEB-rx*W9$u z$AC*TI9gEDqFi^utY0##tIJ~0EGKb~(hA6cc5BkC&O#_b{Rg1^(Vv&5_Et{yo);QG zO`58>)#o!-QCmLgg(gTBu!`)aqy2UQYCPp(Xb&)z0*^5* zPt4?!?Yt$;N^G(XHzW*Ak(qjDg9$m>0qP=6%d>-z2_sedV^28bj6y>EBjUQct&>P% z;cVKSJciqcSEecIZ1ankE=(pQbsC(#^MdR4aq|(P16AOzt2rl&{FUa|UFa}26Kv9a ztm9r}*4>Er4?C(~wXV~e6}xL41}kE)vMNppbd~x&$15t(SXgL~S@qIN*h>9RVbjUC z6!!fcMZYhWW%{JQGM{!oCxg_YvhDKHW1(ar2c#M2=Byoi@3TeLF!AyT#n-Y$BSulZ zdou4pdceHfUrGxK5G(e;;DtzGBnoaice4Se1k`kT_I{culcGJF;2sP6umSmNc!ojZ zDeICL1Mbr%%duvU;mj!%0r87=?O5RCU-;?n;K$%`WeY$+)(YAeB%kncPE|*Zd6&Ua zKjwaRuY!RX7J`H87{8n-nCKH_P0zm`9@%+d_UeAk~Y* zGlhT0#=7t90yj6`vZgpcgcqb>S@y?{olgSWwJx46Atl{o$qCNx*dra@%zAtT-t%zv z6T=q@@Q{C^ZPWalMP$JByj?HU_u9JMZSQ8tjjA8ShCOWi(V7z2)3bN^JA*}=BMq#rV>g)=elvG z-{s=$W6ApfaP)ku7QL65xV~-~?%juN2}p-<-_G>=0Q;QuYUX0-)zN)6>kd1P?$Y{9 zUdv=^Qc2y`36@V!;2*OwBvqlA-MuZ7MGm^!9u0*nXBqFN7rlOtL-9aO^b25m819`K zpH>KBPmJKF_UHN?^sUtl!UCe{>>UgvORlf=1WOQ*EMHyZAT?-F{@|!d>Ptz5t1mfB4{o=<74W0%Z0@EBKiwlX zSb!8oSwx(>4XR2U=#-<&&rYqgc?K& z)U|E^{J&4WrKNR3%~d9?yJsmGGucHI9MjUeNIy^oC&v>yF~A!s{+Q|29Aa9>Mezhv zFpbyCW%A4(*&j$3-nn1gqJ2sLr+WBDXeDia~mEWZi}TpN(Lb*kMl5~VN!&v@f^qYry0og6dyTcD9Frc1?m*A z#wol~*KU-oM+R%0D4WH$xs9m9RP36Q%#;aAR{?-QZ+47HF};{dN26E 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 XXUoFT$6q!aBG8Ml3&rPtzx{sz7CD{}; + return new Proxy({imageSmoothingEnabled:false, canvas:{width:1,height:1}}, {get(t,p){ + if(p in t) return t[p]; + if(p==='measureText') return () => ({width:0}); + return noop; + }, set(t,p,v){ t[p]=v; return true; }}); +} +function makeEl(id){ return new Proxy({ id, width:640, height:480, style:{}, classList:{add(){},remove(){},toggle(){},contains(){return false;}}, dataset:{}, value:'', checked:false, textContent:'', innerHTML:'', append(){}, appendChild(){}, addEventListener(){}, removeEventListener(){}, setAttribute(){}, removeAttribute(){}, focus(){}, blur(){}, getBoundingClientRect(){return {left:0,top:0,width:640,height:480};}, getContext(){return makeCtx();}, querySelector(){return makeEl('q');}, querySelectorAll(){return [];}}, {get(t,p){ if(p in t) return t[p]; if(p==='children') return []; return undefined; }, set(t,p,v){ t[p]=v; return true; }}); } +const localStorage = { getItem(){return null;}, setItem(){}, removeItem(){} }; +const sandbox = { console, window: {}, document: { getElementById: makeEl, createElement: makeEl, querySelector(){return makeEl('q')}, querySelectorAll(){return []}, addEventListener(){}, body: makeEl('body')}, localStorage, performance: { now: () => 0 }, Math, Date, Map, Set, Array, Object, JSON, Number, String, Boolean, RegExp, Error, Uint8Array, Int8Array, Uint16Array, URL: {createObjectURL(){return ''}, revokeObjectURL(){}}, Blob: function(){}, Image: function(){}, FileReader: function(){}, requestAnimationFrame(){}, cancelAnimationFrame(){}, setTimeout, clearTimeout, structuredClone: global.structuredClone }; +sandbox.window = Object.assign(sandbox.window, { PixelIslandModules:{}, devicePixelRatio:1, addEventListener(){}, removeEventListener(){}, matchMedia(){return {matches:false, addEventListener(){}, removeEventListener(){}}}, requestAnimationFrame(){}, cancelAnimationFrame(){}, document: sandbox.document, localStorage: sandbox.localStorage }); +vm.createContext(sandbox); +vm.runInContext(code, sandbox, {filename:'app.js'}); +const debug = sandbox.window.__PIXEL_DEBUG__; +const assets = debug.state.assets.map(a => ({id:a.id,name:a.name,category:a.category,subtype:a.subtype,width:a.width,height:a.height,pixels:a.pixels,faces:a.faces,meta:a.meta,contentHash:a.contentHash})); +fs.writeFileSync(path.join(__dirname,'assets.json'), JSON.stringify(assets,null,2)); +console.log('assets', assets.length); +console.log(assets.map(a=>`${a.name} ${a.width}x${a.height} ${a.category}/${a.subtype}`).join('\n'));