Skip to content

作業履歴 2025-08-05

概要

2025-08-05の作業内容をまとめています。

コミット: d271c0d

メッセージ

docs: Phase 1要件フェーズの完全実装
## 主要成果物
- ADRファイル: 7個(技術選定記録)
- 要件設計書: 5個(ユーザーストーリー、ユースケース等)
- システム設計書: 5個(データモデル、アーキテクチャ等)
- テンプレートファイル: 2個

## 実装内容
### アーキテクチャ決定記録 (ADR)
- TypeScript、Vitest、Canvas API、TDD、GitHub Actions、Vercelの採用決定
- 各技術選定の理由と影響を明文化

### 要件設計
- 11のユーザーストーリー詳細化(55ストーリーポイント)
- 10の主要ユースケース詳細化
- 包括的な非機能要件定義
- 段階的リリース計画策定

### システム設計
- レイヤードアーキテクチャ(4層構造)
- DDD原則に基づくドメインモデル設計
- データモデル設計(7つの主要エンティティ)
- レスポンシブUI設計
- 3層テスト戦略(単体・統合・E2E)

## ディレクトリ構造改善
- docs/requirements/: 要件定義系ドキュメント
- docs/design/: システム設計系ドキュメント
- docs/adr/: アーキテクチャ決定記録
- mkdocs.yml: navigation構造を論理的に整理

## 品質指標
- TODO完了率: 11/11 (100%)
- PlantUML図: 20+個作成
- 総ページ数: 50+ページ
- Phase 2への実装準備: 完了

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

変更されたファイル

  • A docs/adr/0001-adopt-typescript.md
  • A docs/adr/0002-adopt-vitest.md
  • A docs/adr/0003-adopt-canvas-api.md
  • A docs/adr/0004-adopt-tdd-approach.md
  • A docs/adr/0005-adopt-github-actions.md
  • A docs/adr/0006-adopt-vercel.md
  • A docs/adr/index.md
  • A docs/design/index.md
  • A "docs/design/\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md"
  • A "docs/design/\343\203\206\343\202\271\343\203\210\346\210\246\347\225\245.md"
  • A "docs/design/\343\203\207\343\203\274\343\202\277\343\203\242\343\203\207\343\203\253\350\250\255\350\250\210.md"
  • A "docs/design/\343\203\211\343\203\241\343\202\244\343\203\263\343\203\242\343\203\207\343\203\253\350\250\255\350\250\210.md"
  • A "docs/design/\343\203\246\343\203\274\343\202\266\343\203\274\343\202\244\343\203\263\343\202\277\343\203\274\343\203\225\343\202\247\343\203\274\343\202\271\350\250\255\350\250\210.md"
  • A "docs/requirements/\343\203\246\343\203\274\343\202\266\343\203\274\343\202\271\343\203\210\343\203\274\343\203\252\343\203\274\350\251\263\347\264\260.md"
  • A "docs/requirements/\343\203\246\343\203\274\343\202\271\343\202\261\343\203\274\343\202\271\350\251\263\347\264\260.md"
  • A "docs/requirements/\350\246\201\344\273\266.md"
  • A "docs/requirements/\351\201\213\347\224\250\350\246\201\344\273\266\343\201\250\343\203\252\343\203\252\343\203\274\343\202\271\350\250\210\347\224\273.md"
  • A "docs/requirements/\351\235\236\346\251\237\350\203\275\350\246\201\344\273\266.md"
  • A docs/template/ADR.md
  • A "docs/template/\350\250\255\350\250\210.md"
  • M mkdocs.yml

変更内容

commit d271c0d9919bc7c5b72315002ff33780d47631e2
Author: k2works <kakimomokuri@gmail.com>
Date:   Tue Aug 5 13:17:28 2025 +0900

    docs: Phase 1要件フェーズの完全実装

    ## 主要成果物
    - ADRファイル: 7個(技術選定記録)
    - 要件設計書: 5個(ユーザーストーリー、ユースケース等)
    - システム設計書: 5個(データモデル、アーキテクチャ等)
    - テンプレートファイル: 2個

    ## 実装内容
    ### アーキテクチャ決定記録 (ADR)
    - TypeScript、Vitest、Canvas API、TDD、GitHub Actions、Vercelの採用決定
    - 各技術選定の理由と影響を明文化

    ### 要件設計
    - 11のユーザーストーリー詳細化(55ストーリーポイント)
    - 10の主要ユースケース詳細化
    - 包括的な非機能要件定義
    - 段階的リリース計画策定

    ### システム設計
    - レイヤードアーキテクチャ(4層構造)
    - DDD原則に基づくドメインモデル設計
    - データモデル設計(7つの主要エンティティ)
    - レスポンシブUI設計
    - 3層テスト戦略(単体・統合・E2E)

    ## ディレクトリ構造改善
    - docs/requirements/: 要件定義系ドキュメント
    - docs/design/: システム設計系ドキュメント
    - docs/adr/: アーキテクチャ決定記録
    - mkdocs.yml: navigation構造を論理的に整理

    ## 品質指標
    - TODO完了率: 11/11 (100%)
    - PlantUML図: 20+個作成
    - 総ページ数: 50+ページ
    - Phase 2への実装準備: 完了

    🤖 Generated with [Claude Code](https://claude.ai/code)

    Co-Authored-By: Claude <noreply@anthropic.com>

diff --git a/docs/adr/0001-adopt-typescript.md b/docs/adr/0001-adopt-typescript.md
new file mode 100644
index 0000000..22f12b7
--- /dev/null
+++ b/docs/adr/0001-adopt-typescript.md
@@ -0,0 +1,41 @@
+# ADR-0001: TypeScriptの採用
+
+## ステータス
+
+承認済み
+
+## コンテキスト
+
+ぷよぷよゲームをWebブラウザで動作させるアプリケーションを開発する必要がある。
+開発言語を選定するにあたり、以下の要件を考慮する必要がある:
+
+- ブラウザでの動作が必要
+- ゲームロジックの複雑性に対応できる型安全性
+- テスト駆動開発を実践できる環境
+- 開発効率とメンテナンス性
+- 連鎖処理やスコア計算などの複雑な計算ロジック
+
+## 決定
+
+TypeScriptを開発言語として採用する。
+
+## 理由
+
+- **型安全性**: 静的型付けによりコンパイル時にエラーを検出でき、ぷよの色や位置座標、連鎖計算などの複雑なゲームロジックの実装において高い安全性を確保できる
+- **開発効率**: IDEの補完機能やリファクタリング支援が充実しており、大量のゲームロジックの実装において生産性が高い
+- **テスト環境**: Vitestなどの優れたテストツールが利用可能で、TDD実践に適している
+- **エコシステム**: npmによる豊富なライブラリとツールが利用可能
+- **ブラウザ互換性**: TypeScriptはJavaScriptにトランスパイルされるため、すべてのモダンブラウザで動作する
+- **保守性**: 型情報により複雑なゲーム状態の管理が容易になる
+
+## 結果
+
+### 良い結果
+- 型による安全性の向上(ぷよの状態、座標、色などの管理が安全)
+- 開発効率の向上(IDEサポートによる開発支援)
+- テスト駆動開発の実践が容易
+- 複雑なゲームロジックの実装における安全性
+
+### 悪い結果
+- ビルドプロセスが必要
+- 学習コストが発生する可能性
\ No newline at end of file
diff --git a/docs/adr/0002-adopt-vitest.md b/docs/adr/0002-adopt-vitest.md
new file mode 100644
index 0000000..3025273
--- /dev/null
+++ b/docs/adr/0002-adopt-vitest.md
@@ -0,0 +1,42 @@
+# ADR-0002: Vitestの採用
+
+## ステータス
+
+承認済み
+
+## コンテキスト
+
+TypeScriptプロジェクトにおいてテスト駆動開発を実践するため、適切なテスティングフレームワークを選定する必要がある。
+ぷよぷよゲームのような複雑なゲームロジック(連鎖処理、消去判定、スコア計算等)を安全に実装するために、効果的なテスト環境が必要。
+
+選定にあたっての要件:
+- TypeScriptとの親和性
+- 高速なテスト実行(TDDサイクルの高速化)
+- 使いやすいAPI
+- ウォッチモードのサポート
+- ゲームロジックのテストに適した機能
+
+## 決定
+
+Vitestをテスティングフレームワークとして採用する。
+
+## 理由
+
+- **高速**: Viteベースで動作し、高速なテスト実行が可能。TDDのRed-Green-Refactorサイクルを高速で回せる
+- **TypeScript対応**: TypeScriptを標準でサポートし、追加設定が最小限
+- **Jest互換**: Jest互換のAPIを提供し、学習コストが低い
+- **ウォッチモード**: ファイル変更を検知して自動的にテストを再実行。連続的な開発に適している
+- **ESM対応**: ES Modulesを標準でサポート
+- **ゲームテスト対応**: モック機能やスパイ機能により、ゲーム状態やイベントのテストが容易
+
+## 結果
+
+### 良い結果
+- テスト実行速度の向上によるTDDサイクルの高速化
+- 開発体験の向上
+- 設定の簡素化
+- ゲームロジックの安全な実装
+
+### 悪い結果
+- Jestからの移行が必要な場合がある
+- 比較的新しいツールのため、一部のエコシステムが未成熟な可能性
\ No newline at end of file
diff --git a/docs/adr/0003-adopt-canvas-api.md b/docs/adr/0003-adopt-canvas-api.md
new file mode 100644
index 0000000..ea488ed
--- /dev/null
+++ b/docs/adr/0003-adopt-canvas-api.md
@@ -0,0 +1,45 @@
+# ADR-0003: Canvas APIの採用
+
+## ステータス
+
+承認済み
+
+## コンテキスト
+
+ぷよぷよゲームの描画システムを実装するにあたり、適切な描画技術を選定する必要がある。
+ゲームでは以下の描画要件がある:
+
+考慮すべき要件:
+- 2Dグラフィックスの描画(ぷよ、フィールド、スコア表示)
+- アニメーション処理(落下、消去、連鎖エフェクト)
+- パフォーマンス(60FPSでの滑らかな描画)
+- ブラウザ互換性
+- 学習コスト
+- ゲームに必要な基本図形描画(矩形、円、テキスト)
+
+## 決定
+
+HTML5 Canvas APIを描画システムとして採用する。
+
+## 理由
+
+- **2Dグラフィックス**: ぷよぷよゲームに必要な2D描画機能(矩形、円、テキスト描画)が十分に提供されている
+- **パフォーマンス**: ハードウェアアクセラレーションにより高速な描画が可能で、60FPSのゲーム描画に適している
+- **標準技術**: 追加のライブラリなしで使用可能な標準Web API
+- **ブラウザサポート**: すべてのモダンブラウザでサポートされている
+- **シンプル**: 学習コストが低く、実装がシンプル
+- **ゲーム向け機能**: フレームバッファ、座標変換、色彩管理などゲーム描画に必要な機能が揃っている
+- **デバッグ容易性**: ブラウザ開発者ツールでの描画処理の確認が可能
+
+## 結果
+
+### 良い結果
+- 外部依存がない
+- 高速な描画パフォーマンス
+- 実装の透明性
+- ぷよゲームに必要な基本図形描画の実装が容易
+
+### 悪い結果
+- 低レベルAPIのため、ゲームエンジンに比べて実装量が多い
+- 複雑なアニメーションには追加の実装が必要
+- 画像リソース管理は自前で実装する必要がある
\ No newline at end of file
diff --git a/docs/adr/0004-adopt-tdd-approach.md b/docs/adr/0004-adopt-tdd-approach.md
new file mode 100644
index 0000000..3e571c1
--- /dev/null
+++ b/docs/adr/0004-adopt-tdd-approach.md
@@ -0,0 +1,43 @@
+# ADR-0004: テスト駆動開発(TDD)アプローチの採用
+
+## ステータス
+
+承認済み
+
+## コンテキスト
+
+ぷよぷよゲームの開発において、複雑なゲームロジック(ぷよの移動、回転、消去判定、連鎖処理、スコア計算)を安全かつ効率的に実装する必要がある。
+従来の開発手法では以下の課題がある:
+
+- ゲームロジックの複雑性により、バグの混入リスクが高い
+- 連鎖処理などの複雑な処理の正確性を保証するのが困難
+- 後からのリファクタリングや機能追加の安全性が低い
+- デバッグに時間がかかる
+
+## 決定
+
+テスト駆動開発(TDD)アプローチを開発手法として採用する。
+
+## 理由
+
+- **品質保証**: Red-Green-Refactorサイクルにより、すべての機能が必ずテストされ、高品質なコードが保証される
+- **設計改善**: テストファーストにより、テスタブルで結合度の低い設計になる
+- **安全なリファクタリング**: 包括的なテストスイートにより、リファクタリングが安全に実行できる
+- **ドキュメント効果**: テストコードが実行可能な仕様書として機能する
+- **複雑なロジックの理解**: 連鎖処理やスコア計算などの複雑なロジックをテストケースで明確化できる
+- **デバッグ効率**: 問題が発生した際に、テストにより問題箇所を特定しやすい
+- **継続的改善**: 各イテレーションでの安全な機能追加が可能
+
+## 結果
+
+### 良い結果
+- ゲームロジックの正確性保証
+- 安全なリファクタリングによるコード品質向上
+- テストコードによる仕様の明確化
+- バグの早期発見と修正
+- 継続的な機能追加の安全性
+
+### 悪い結果
+- 開発初期の時間投資が必要
+- テストコードの記述・維持コストが発生
+- 学習コストが発生する可能性
\ No newline at end of file
diff --git a/docs/adr/0005-adopt-github-actions.md b/docs/adr/0005-adopt-github-actions.md
new file mode 100644
index 0000000..3038a7c
--- /dev/null
+++ b/docs/adr/0005-adopt-github-actions.md
@@ -0,0 +1,44 @@
+# ADR-0005: GitHub Actionsの採用
+
+## ステータス
+
+承認済み
+
+## コンテキスト
+
+継続的インテグレーション(CI)とデプロイメント(CD)の環境を構築する必要がある。
+以下の要件を満たす必要がある:
+
+- 自動化されたテスト実行
+- ビルドプロセスの自動化
+- コード品質チェック(リント、フォーマット)
+- 自動デプロイメント
+- GitHubとの統合
+- 学習コストと運用コスト
+
+## 決定
+
+GitHub Actionsを CI/CD プラットフォームとして採用する。
+
+## 理由
+
+- **GitHub統合**: GitHubリポジトリとネイティブに統合されており、設定が簡潔
+- **無料プラン**: パブリックリポジトリでは無料で利用可能
+- **豊富なアクション**: npmパッケージのインストール、テスト実行、デプロイなど、必要なアクションが充実
+- **設定の簡単さ**: YAMLファイルによる設定で、学習コストが低い
+- **スケーラビリティ**: 必要に応じてワークフローを拡張可能
+- **Node.js対応**: TypeScript/Node.jsプロジェクトに最適化されたアクションが利用可能
+- **並列実行**: テストとビルドを並列実行して高速化が可能
+
+## 結果
+
+### 良い結果
+- 自動化されたテスト実行による品質保証
+- 手動デプロイの削減によるヒューマンエラー防止
+- GitHub統合による開発フローの統一
+- 開発効率の向上
+
+### 悪い結果
+- GitHub依存が発生
+- 複雑なワークフローでは設定が煩雑になる可能性
+- ビルド時間による開発速度への影響
\ No newline at end of file
diff --git a/docs/adr/0006-adopt-vercel.md b/docs/adr/0006-adopt-vercel.md
new file mode 100644
index 0000000..f2c5269
--- /dev/null
+++ b/docs/adr/0006-adopt-vercel.md
@@ -0,0 +1,46 @@
+# ADR-0006: Vercelの採用
+
+## ステータス
+
+承認済み
+
+## コンテキスト
+
+ぷよぷよゲームアプリケーションをプロダクション環境にデプロイするため、適切なホスティングプラットフォームを選定する必要がある。
+
+選定にあたっての要件:
+- 静的サイトホスティング(TypeScriptビルド後のHTML/CSS/JS)
+- 高速なデプロイメント
+- 自動デプロイ(GitHub連携)
+- 無料または低コスト
+- グローバルCDN
+- HTTPS対応
+- カスタムドメイン対応
+
+## 決定
+
+Vercelをホスティングプラットフォームとして採用する。
+
+## 理由
+
+- **フロントエンド特化**: 静的サイトとSPAに最適化されたプラットフォーム
+- **GitHub統合**: GitHubと連携した自動デプロイが可能
+- **高速デプロイ**: 数秒から数分での高速デプロイメント
+- **グローバルCDN**: 世界各地のエッジサーバーによる高速配信
+- **無料プラン**: 個人プロジェクトに適した無料プランが利用可能
+- **HTTPS標準**: 自動的にHTTPS化される
+- **プレビューデプロイ**: プルリクエストごとのプレビュー環境が自動作成される
+- **TypeScript対応**: TypeScriptプロジェクトのビルドとデプロイが標準サポート
+
+## 結果
+
+### 良い結果
+- 自動デプロイによる運用効率化
+- グローバルCDNによる高速なゲーム配信
+- プレビューデプロイによる安全な機能検証
+- 運用コストの削減
+
+### 悪い結果
+- Vercel依存が発生
+- 複雑なサーバーサイド処理には不向き(今回は該当なし)
+- トラフィック制限あり(無料プランの場合)
\ No newline at end of file
diff --git a/docs/adr/index.md b/docs/adr/index.md
new file mode 100644
index 0000000..cb73fbd
--- /dev/null
+++ b/docs/adr/index.md
@@ -0,0 +1,58 @@
+# アーキテクチャ決定記録(ADR)
+
+このディレクトリには、ぷよぷよゲーム開発プロジェクトにおける重要な技術的決定事項を記録したアーキテクチャ決定記録(Architecture Decision Records)を保存しています。
+
+## ADR一覧
+
+| ADR | タイトル | ステータス | 決定日 |
+|-----|----------|------------|--------|
+| [ADR-0001](0001-adopt-typescript.md) | TypeScriptの採用 | 承認済み | 2025-08-05 |
+| [ADR-0002](0002-adopt-vitest.md) | Vitestの採用 | 承認済み | 2025-08-05 |
+| [ADR-0003](0003-adopt-canvas-api.md) | Canvas APIの採用 | 承認済み | 2025-08-05 |
+| [ADR-0004](0004-adopt-tdd-approach.md) | テスト駆動開発アプローチの採用 | 承認済み | 2025-08-05 |
+| [ADR-0005](0005-adopt-github-actions.md) | GitHub Actionsの採用 | 承認済み | 2025-08-05 |
+| [ADR-0006](0006-adopt-vercel.md) | Vercelの採用 | 承認済み | 2025-08-05 |
+
+## 技術スタック概要
+
+### フロントエンド
+- **言語**: TypeScript
+- **描画**: HTML5 Canvas API
+- **テスト**: Vitest
+- **開発手法**: テスト駆動開発(TDD)
+
+### CI/CD
+- **CI**: GitHub Actions
+- **ホスティング**: Vercel
+
+### 開発プロセス
+- テスト駆動開発によるイテレーション開発
+- GitHub Actionsによる自動テスト・ビルド・デプロイ
+- Vercelによる継続的デリバリー
+
+## ADRテンプレート
+
+新しいADRを作成する際は、以下の構造に従ってください:
+
+```markdown
+# ADR-XXXX: [決定事項のタイトル]
+
+## ステータス
+[提案中/承認済み/廃止/置換済み]
+
+## コンテキスト
+[決定が必要になった背景や課題]
+
+## 決定
+[実際に行った決定]
+
+## 理由
+[決定の理由と根拠]
+
+## 結果
+### 良い結果
+[期待される良い結果]
+
+### 悪い結果
+[予想される制約や問題]
+```
\ No newline at end of file
diff --git a/docs/design/index.md b/docs/design/index.md
new file mode 100644
index 0000000..ed8e5a5
--- /dev/null
+++ b/docs/design/index.md
@@ -0,0 +1,136 @@
+# 設計ドキュメント
+
+## 概要
+
+このディレクトリには、ぷよぷよゲーム(Case3)の設計に関するドキュメントを格納しています。システムの構造、データモデル、ユーザーインターフェース、テスト戦略など、開発に必要な設計情報を体系的に整理しています。
+
+## 設計ドキュメント一覧
+
+### システム設計
+
+| ドキュメント | 概要 | 対象読者 |
+|--------------|------|----------|
+| [データモデル設計](データモデル設計.md) | エンティティ、値オブジェクト、データフローの設計 | 開発者、アーキテクト |
+| [アーキテクチャ設計](アーキテクチャ設計.md) | レイヤードアーキテクチャとコンポーネント設計 | アーキテクト、リードエンジニア |
+| [ドメインモデル設計](ドメインモデル設計.md) | DDD原則に基づくドメイン設計 | ドメインエキスパート、開発者 |
+
+### ユーザー体験設計
+
+| ドキュメント | 概要 | 対象読者 |
+|--------------|------|----------|
+| [ユーザーインターフェース設計](ユーザーインターフェース設計.md) | UI/UXデザイン、レスポンシブ対応 | UI/UXデザイナー、フロントエンド開発者 |
+
+### 品質保証設計
+
+| ドキュメント | 概要 | 対象読者 |
+|--------------|------|----------|
+| [テスト戦略](テスト戦略.md) | TDD、テストピラミッド、品質保証戦略 | QAエンジニア、開発者全員 |
+
+## 設計原則
+
+### 1. 関心の分離
+- 各設計ドキュメントは明確な責任範囲を持つ
+- レイヤー間の依存関係を最小化
+- 変更影響範囲の局所化
+
+### 2. 拡張性
+- 新機能追加に対する柔軟性
+- プラットフォーム対応の余地
+- 国際化・アクセシビリティ対応
+
+### 3. 保守性
+- 理解しやすい設計
+- テスタブルな構造
+- ドキュメント化された決定プロセス
+
+## 設計の関連性
+
+<img src="data:image/svg+xml;base64,PGgxPkJhZCBNZXNzYWdlIDQxNDwvaDE+PHByZT5yZWFzb246IFVSSSBUb28gTG9uZzwvcHJlPg==" class="uml" alt="uml diagram" title="" />

## コミット: 8ad12a1

### メッセージ
docs: add CLAUDE.md with development guidelines and process diagrams
### 変更されたファイル

- A CLAUDE.md

### 変更内容

```diff
commit 8ad12a1266ec69b4a9cfd2519d1c76cb670094f7
Author: k2works <kakimomokuri@gmail.com>
Date:   Tue Aug 5 13:15:22 2025 +0900

    docs: add CLAUDE.md with development guidelines and process diagrams

diff --git a/CLAUDE.md b/CLAUDE.md
new file mode 100644
index 0000000..901a7c9
--- /dev/null
+++ b/CLAUDE.md
@@ -0,0 +1,149 @@
+\# CLAUDE.md
+
+ここで**必ず**と指示されていることは絶対に実施してください
+
+日本語で回答してください
+
+あなたは**よいソフトウェア**に対する明確な考えと\*\*よいソフトウェア\*\*を作るための規律を持った開発経験豊富な開発者です。
+
+よいソフトウェアについては @docs/reference/よいソフトウェアとは.md を参照してください。
+
+よいソフトウェアについての考えと規律と経験に関する知見は @docs/reference 内を参照してください。
+
+あなたは @docs/reference/開発ガイド.md に従いソフトウェア開発を手段として問題解決に取り組みます。
+
+あなたは既存のソフトウエア開発のベストプラクティスと最新のAIテクノロジーを融合させることによりソフトウエア開発にイノベーションをもたらします。
+
+<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjb250ZW50U3R5bGVUeXBlPSJ0ZXh0L2NzcyIgaGVpZ2h0PSIyNjVweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSIgc3R5bGU9IndpZHRoOjUzM3B4O2hlaWdodDoyNjVweDtiYWNrZ3JvdW5kOiMwMDAwMDA7IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1MzMgMjY1IiB3aWR0aD0iNTMzcHgiIHpvb21BbmRQYW49Im1hZ25pZnkiPjxkZWZzLz48Zz48cmVjdCBmaWxsPSIjMDEwRTIwIiBoZWlnaHQ9IjEiIHN0eWxlPSJzdHJva2U6IzAxMEUyMDtzdHJva2Utd2lkdGg6MTsiIHdpZHRoPSIxIiB4PSIwIiB5PSIwIi8+PHJlY3QgZmlsbD0iI0ZGRkZGRiIgaGVpZ2h0PSI3MyIgc3R5bGU9InN0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoxOyIgd2lkdGg9IjUzMiIgeD0iMCIgeT0iMCIvPjxpbWFnZSBoZWlnaHQ9IjUzIiB3aWR0aD0iNDUwIiB4PSIxIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWNJQUFBQTFDQU1BQUFEbEpodGlBQUFEQUZCTVZFWDRaMVFBT3BELy85dG10di9iLy84QUFEbzZBQUQvLy84QUFBQUFMRW5ia0RxUTIvK1FPZ0E2a051MlpnQm1BQUQvdG1iLy83Yi8yNUFBWnJZQUFHYTIvLy8vYVZRQUowajVaMVQvYWxTdlZWQUFJMFptT2dBNlpwRDNaMVE2WnJiYnRtYTIyLysyWmpyM1psTUFPbWIrLy8vLzI3WUFPanJidHBENFpsUzIyOXRtdHRzNmtMWUFacEMya0RwbWtOdjRabFAvYlZTUVpqcmIvOXNBS2tnNkFEcjRaMVAzVmtIM1psVDNWVC8zVmtEM1dFTVFNRW1oVWs4NmtKQTZPZ0Mya0dZNlptYjNZRXozWGtuM1pWSDNYRWYzWTAvM1cwYjNWMEwzWlZMM1pGSC90cEJtWm1hUTI5dmIyNUJta0xhUXR0dTIyNURiLzdZQVptYis5ZlQzWFVqNWdYSDNYa3IzVmovM1dFTDd2TFAzWEVqM1ZVRDNYMHY0WkZEM1gwci8vLzczWVUzM1pGRDdaMVRia0dhUVpnQ1FrRHBtdHBCbU9qcmIyN2I0VzBiNWczUDVsSVgzWWs3OTUrVDNYMG4zV1VYNWkzdjZsb2o2bjVMNGJWcjd4OEQzWVU3M1pFLzd2Ylg4dkxUM1V6NysrL3YzWjFQNmxZZjNYVWY5MzlyKzdPcis5UEwrK2ZqM1ZELzZrb1ArOXZYN3E1LzZsNG43dWEvOHhiNzRYa245NXVQMlZrRCsvUHYzV2tiMldFUDdzS2I3dTdMOTJ0WDk0dDM1aEhYOHc3ejkyZFA2cFpuODBNbjRhRlA1ZjIvM2FWWC8vdi83cjZUNW5JLzRhRlgrLy83M1lVeisvdjczV2tYOHpzZjVaMVA1ZEdMN3VySDkzTmY5NyszKy9QcjNXVVQ3djdiKzd1djJWVC85NnVmNm5wSDVobmIrYUZNQUlrYjk5dlQzVjBFQUtFajNjRjRBSmtmN3ViRGZZVkd6VmxENGhuYXRWRkNYVDA4QUgwYi9hVlA4eThUKysvcWFVRS8rNyswQUlrZW9VMUQ0WVUzM1hVbjRjbUQzWTFENGJWdjRlbWkydHBDUXR2Ly8yOXZiMi8rMmtKRGIyOXUydHR1MjI3WTZBR1k2T3BDMi85dG10cmFRa0dZQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFtdmFUbkFBQU5Sa2xFUVZSNFh1MmNhNHdrUlIzQXE1OHowek96QTdlN3pMNXVOc2V5eC90aUlzS2VoR0RDNCtDUTZDZEVDQ0pCallid3dZU0VTRFNhR0kySmdvbGZrT0FINGdOalZQakFRelFvSklKM0VYSVBQTGdIZDl6dHdzM3VMYk8zdTdQejZxNStXTlZWWGQxZDB6TTl1N25aUnpLLzVMYXJxK3BmLy8vVXY3b2VNLzgrSVFGNmJHM2swSjBldXV1VTNpallVRVErbzhkV28rZkNMVS9QaFZ1ZUxyb3dQU2hjWXZHWlBTNDQzWE9oWnBYQXB3NmZHMDNLbG9Fa1pNQ29FZWR6WExOSGlLNjRjSGdYNm1kZFY3UnJrM3hSSk5CMEw0YTJ3QlZROXU5K2FFb1E3Q0hMcTlrS09nVFNEcW8yTEtodW5qYUlNeE5HWDZqbXBrVEtyc1ZJSVhRaVlJZUt3b3ovbHpJRjlydDU2YU9oYkJCeHFFalVWUk5xU2NGNmE1ZkVsMFdoMldVSlYweFhzaFcrRE9Cc090QjBLVXRyOG1pMmJhQ2hnSFNXMFoxa0t3YjZvK09xVURNelFsbXpGYmRrNHlHV1J1S1p2MHFrMEx6a1RXT0YzeDRlUm1oUHZzQ0twbllPUEZidkgzdHNXWnRRcE9Ycno3SUMvbXlKVEpFenFwNFZ4Qlg0VEdjUHVWcTd5SDI2Wkl0WkVLU1doSk4vZXhhTU56SXBoOWJra1hVSlNXS2QrRTYxZEJIOUVSSTI2ckxHN21PNnFEaExlbWUyZEJ0aWFTUlpZVTFHUm9zMG9KUkcvT1M3UXpSajR2YUxicHFxVG0zZmJ1NjY3ZlAzWG4zOWY2OFAxUStUa3hZV2dWRG5CcHVFVnpGNHRXQWpINlNFa0NOc2NZbG0xUUI0QU0rQzZDK2RCMTF5OHpjQWNOSmFXTVExM1ZhNFJkTzJrTGQ4blZZU1FIdGNRQjh1WmZ6djBEWUpsV3hyZW5qYkdOUkVVS01yUjlneGlCWndKcHRDbHFPY29XQ0tLWEJNT0lyYklKWlNBYWJWYlVpb1o1cU03SURvaWZTU1A4THZvOHNQditYTXVmY1RRNCtJRDdKYVQ1MDRjZ1lHSmxOK0lrMVhFb2FHVnkzcnFtTTBBMDJRRXNTeks4NVZUY21HYVAraWVkTUdMc0paNUlyS3dXalJyVWVLb1ZaRlUrSjRVYmZkR2tCTGx3QkFzMk5pUmNyVUhGdDJXeDAvN2FoS0ErTGVkU2VrZEdYbnpJclVWOGs2V0RrM1JjY1psRkNGQlEycEE4TkZpR2RqVHlPVEk5VWs1STMwc3VySm92bmI5US82SUN6bEtVQnJpMFRIRjdhVU5NQzBrb1l5eFB6VjBzS0Zzb1UvekRhYnVQRFdvUy9mRHdxUFA4THFQVEovNUJDN2FYSmhxb0dYSXZaQnFhbDRnWlJzL0lrVkEzVlIyVnNBZ2R0alpmd1BmWnFxUFNnWFVRdGoxam5Xb1pwZCtJTnpWMmxzMW5Scm9sN0pEeHl2U3JhV3ZPa1YwZlVsN3B6QjdDbXNBbEFYcGhvd1lVOU1Kd1dJclhGTjhvazFxSDdIR3laYWV2c3FJaDVJbmthSnlibTEwcFcrYkpGWTc4cEs5cTJ2RDhybjhGZ01wRHdGSXlmUzl6enZkakN5bEtxaGtuMmtvV0NYcllMb3RUQXRPbGhaeWdGNDdPNzl4algzUGZQeThxdCt2WGZ1MkZsY1pIZjgwSEVjdkJTWmVHaTVRTFV1aW5pQnJLaWFDRFZkVGdDMFpzbDZ6bnZLNUdYZFF2OUVkV21pcEpSWEFKUTB2ZDdBczZxTFdsdDg5amVEQTZkSVRURmpwTTlYaExScEt3TXowbGkxWXR0V1d0ODVYMThFY2xyRlpydHJpbVFra3ZvU2RPcUtpYXh4VFdMRUdRVGt4czBITHl0RFVhcVAxUXcwU3FoR0prZUd1bXhkUElzR0dKTVZuWStROWFxUnNGbEtwd29hY3Y1a3BuTFFCTlJTRnlaSkdnS2lZVWV2YSszcHdJVVR3dFQ5NE9WZ05RRDJqWXdjWVRlOEMwVVQ3U05vZDJLeWd1S0FzYklxb1BHTGJMWWtxU1pZNDBMTlU1Y1ZkTEVQOTVBc0xtUVVKTlZYejRObGxUMDJzalg1OTZmTDUwVlNNK09rUk4wMlZTTXJMSzQ0QzBCQWZTeGJLL2dFS2lOM0FySTcwb0NtVnBLR2pRY1U2aGdSLzJIRUdRVGxIVzltUGxiZ0Y0OEJ4MHhhbXErUnlwRlBWaytzYkwveHBNcGtWU3RkQnlrOTIvQlRmVlFCVkJheklwYWlscm93U2RJUTZqZHhMUzZNbDdreS8ralgrRHdBL25yTlYvQnFHWW03SHRrTDdERVY2Z0NPemdHOEdUSG96cU9XUG5OcGFQNGxPeEhyY0tWazRlM050REFjblBnK3VNNWY1eDFkTDZkTllPQm1reVpRMFdBR0J0a2ptRklEWHhvaUxuVEtRQmU5MFNWYndSTnFuRUU1YWJwUFZFU1FoNEpvcXlHTlJJNVVVMnBUTTYrcFFka2xlSGtqNDNZcFRma0tnTzR1QzlSU0NwV2tEVm5xV25ZekhiaHc2dkdIbitYekVELys3UDRDbitlQmVqSVhzZ2FxSHo5SVBpUWNOZnBNYkRTc1dvRXRKMEpGTW4yNzFJUTFnbTVHNW9zN0JqTzBKTHkxTlVCdFIrWHVoSXE2UjYrakQyRERiQi95MVBpZ0NaSzJlQ2VBd3licUpyZnZHTkRPamU5MkJJSHRBR01Od2gyZStKMG9PYW55WlV4alVBNmo3THNVZWRpVGhUWlExQk5XdlJ4SVlSR2lnTHFPV3VvMVFMVzZEV21EbVZiSGpiYkV1bkRpbUFTK3lXZGlEclVjTW1ab3lBTlF2UUtNamYwWmJldFJkNnRGZlJsVVpUQW9IYkhMZ1JsNElEV01Cem1veUluWmpHaWZFNFF6U1dZYjE1NXlCanBBR0xuUkZwRUpTNm8xV2dhU05YTldBTldrOUpxZ3pqbG9GeTk4M1J2dHVPZHpVdVdqL1NKcktONmdUQklQanN0a1VJUFNETlBJNU53NlVFRkdpa3RNTmlmdHRxMDhQaEw1S1UrQklvNXJwR1ZpcVlzbmVUdHBTSmczV25acE8rSjJwT3FmcW5jRmF3VDR6a3ZleGlxYzcwSU9BZ0ZTZU1jOFhCVHpaNXZzaEZwaUdXZml3d2phdjUrejVWUk50UGErMGxUUnJXbWo3ZUZaYWJRNGNkTFBUMnVsd1ZsY0hTa0FlRXZMZ1hZVWV6K2sxbnEwTVVpRGllQVJCRzlJZlkydUhNMjJoZ0s2V0FGS2RmamQ4QVVoem9WemU1NjRQVmpEcDdEbmczK1JWSlFMZVZBbnJtbkgzRFhXYWxCcnVjQjVFY1pPYmhlUU9GMmZXYUZQZlJNejI2OW91UmlHMEpLVEZpaVk1dHFpT3JyQVdnMXFMd2ZGSEowclVTcGMxRjNpWERqODFHMThsc2RaLzJUWWxsci9TVm1ZQTNqaDJoeXMxYUFZT1pIdHdjVVd2N2gwaDFnWENpMGZ0WUhwR1Q0cm1yTkROd0RyY3Y3MHVJR3MxYUMyY29ydW5RbFFLbHpVWFZyWXcvaTIyTkpQZXVFL2ZGWUxabWVCU0w0dDNTU3MxYUMxeW5XVnVLZndSMDdMcDFDN2pzL3BzUkhFZmNGV2Z1dG9zRUtRM2E4S3kyNGk3a251MFZYaW5rSTErMDgreXlNMTBuS083YkdPeExud3FGWGxzendPZUw4SDk5aFFZaWRCSWZpMWJKQ2YxcDdqczNwc0JIRlBJZmpZL2lXZlJTaWVnSHhXajQwZ2JqdFRLU1VuM3N1UmJVdUlKOTQ0ZG9ZbVk1L2tIdDBrOWlrRSsxNy9lZk8ycFFCV3NsaytzOGVHRU8vQ293ZnM1MERocStITW1TY1AvaU1RUGROakE0bWRTQUVvSFQvd2crZkw0Ym4wUzRkZTkyK2FKdEpFcWg0L05EQ2ExQ0FWV1lLUU1wUld1NmcyckVLSzA3ZWw2Y0NGWUM3eDRmZnVlckd3bDBiTEZKWi9jWlYrT1BBZE4rOUNEU3gxRmdRQ0pVaENXbGpDeTdkWTdGVG5yRUtLMDdlMTRicy9rbE5xNHNtbmMvZlJ1MGVQUHovNU52ZjdhUWo4Nnp1QlJwKzNDa0pQbW1ueTB5cExFSEsyNlVUOUhOQ3FIVUlycVFnNGZUN3ROV3hPT25JaE9Qb3o0NDFUdi9xa2YyNjQrdWtuKzdZN2J6WnZjQUxZNGpiYVFZNnVCQzQ4K0VXSGNJSWkxTDBHd3JSb2g5SktxaGxlbjA5N0RadVRUaVpTUkdueHZmN2k2Uk56UzdQVytkUHZ2QjllR1BsaDREZzFPa3RKaG9pbk5uSkpRVXZjb2RTSEtrREtET0IzSDBTalNvNldKT0dYeXhadUFPNHFHZUh0Rm0zSE1pTW5RU0tGR1Y0cDRBQUUxSUJ0UlZYbDlmbTZtS1ZXb1lJekhqZ3NxbGFibGpZRHNZRVh3ZUlycS9qcDQxOXNhZ3E4U05UVmhGWlNxaVJPM3Yza09BamRZVkhxaVRwK0xZRkZXTk5FSUo2OWJkaTk0NFd4YzJIekxQQWgxUUFBdGNoaTRibm8rbVo5Vk5lL1AwYzFTQ1I2SHNyMHZRRFdFalhGMWJKcFdOWFFPdW82ai9kZ00rWXRsUktvdUZ1YTZmeWwrUGZQNmZ3azZvV2I3Y0Zobk9uR2Qyb09qaUVFZ1FRcmwzTWFnTENVdjFwZVdJUjIvOTAxVWJxNFR5SE5UWnB5Wmh2UUZQd1QrZktVaHQvQlNCZEZPVUdrTU9sYTVsMGNNWWdXUEZPVVJMNWFoRDZxNjFwUEE4aE5HT21IRWlCVkhCdkc0UlMwSldZS2tkNHNkRGlSdG9VYmxWQysvS0NwS05sVWpVU2ZlK0h5ZnJ5NlcwMnMwOUJDTCtGSHNiY051L2NENE1OaDgyNnd2dHNPZEg0dFdSYWtzZkFXRjEzZnJNLzJkRkVOa0ViUFcvUzlBSzhseUV3aGhtOFN1dURDckRDUHA3U2FiWHR4OHVUaXg2dGpVbnFDTElRc3djcmJoOTJ6TUhZdWJCNUxZUmRxZUNLMUxPREZ3amZDMVNMMHNZQjdxc0dtMGZQZWV3RmVTNXB2eW1haUM5WWc3K05BZVNucFJaK3pJSFFhcFE0VDlyNklhVFFZejk0dTdONExZK2ZDNWowY0hiK0NpUGZGSkJhZXF4YWhqK255TFhXajU3MzNBcnlXQXFac0pycmdRZ09rMFVjdVh5V015Q1Q2bkZ3Q1VlcTJ1VWZYYVNBWVM0U2kyTnVGM1FlQzU0Tmg4L2orVmljN1lvQnJBTng5QUM5WU5CWStWQzFDbng5dzcybndQTW5lQzNCYjhrM3BOR2hvWFdqaHdyKzgwSWY0UFovZEVaZFllS3BVM2w4cGV0SG43c1dQVWxmUVBLdm85RWpvSlFKUjdJUldZZmVCNEhrdWJCNkF0OFYwVVFYSEJYWC9QV1V2Rmo1Y3JUOVNIOVZGTGZXaTU3MzNBcnlXZkZOdW9UWnVDcUxYd250M3lvZjYrL3Uvc0NmcWhaZ211TFd3d240bFR1WnFnMVdKWG1UOXRDUjQvL0dCT2tsbU96OEIvUEthbk5YUlpKdXZuTXd2NU4vRnIxdWpBNEJROHBwelFCVk5mb0t0bUJJNlhackNlVlR1QUF0TFdXanROa2RYd0ZoNkdzQ1JzcEN2U0NCY2JTbENuK0hwT2s4MVdHWDNkQVUxUTdEdWZBZDZMWDNFVElrTzU5NGdvcytGNE9HWDNNczhLMmtIZnk2TUp1NGQxcmp5QzgxNjYrc2FMVnk0S2pweVlkei95QkZYZnFGWmIzM2RZLzIrYVJBWEl2L0hHRVpjK1lWbXZmVjFqWFY3Q250MGl4WTcwaDViaDU0THR6emhpYlRIRnVUL21Hd0FVaWpWVFk0QUFBQUFTVVZPUks1Q1lJST0iIHk9IjEwIi8+PGltYWdlIGhlaWdodD0iNjIiIHdpZHRoPSI2MiIgeD0iNDUwIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUQ0QUFBQStDQVlBQUFCendhaEVBQUFDcDBsRVFWUjRYdTNTUWFwYlFReEVVZTkvMDhuazkrU1FpOVMyQXlIMmhScW9xcVIrQmo5K2ZTZ1BqVS9oKzhNL2plOFAvelR5aHo4ZWo2ZFUrN2U0NTcydGlrdzhzRlh0MytLZTk3WXFNcGtXNWJaL1dIL29rTXZVejJSYWxOdis0Wi8vNFg1ZzVUWHJUeEo5KzVVWG1iam9BNVhYckQ5SjlPMVhYbVRpb2c5VTdqejVxakIzci9JaUV4ZDlvSExueVZlRnVYdVZGNW00NkFPVk81ZW1udWpicjd6SXhFVWZxTnk1TlBWRTMzN2xSU2JUb2xTL2ZMRTN6Uk5UUDVOcFVhcGZ2dGliNW9tcG44bFp2Slg3NzU1dlZXVGlnYTNjZi9kOHE2S1ROMUVmVVA1aHlsL2w3MTMrb1g1QStZY3BmNVc4N0Y5R2liN3oxaStKdVQxbnljU0RTdlNkdDM1SnpPMDVTeWExV0ErWlB6cy82eCttL0pDTk9uRDhLWDkyZnRZL1RQbGhidnpnd2R0WnYvS0QrVFRmc3Q3MG9kdFp2L0tEK1RUZk1tNzZ3TE1mcmwrYXNIZTdmeGliSHR3K1ZMbjdhc0xlN2Y0aG14NmNEcHZYbnI2NTJGTlRyOGpFQStPaDRVUEtOeGQ3YXVvVm5VQWQwdmRodGUxdFZZeTVSbEdIOVAwd3RlMXRWWXk1aG5pZ1pqVmh6M25DL3ZYN0d1S2htdFdFUGVjSis5ZnZheHc4c0QxY2Vma0g3MjlWakxuR3djVlhIeXovNFAydGlqSFhtS2lISjM4NzY3K3FvcE9nRGsvK2R0Wi9WVVVuTCtMRGZ0QldoZmswU3ljdjRzUCtvSzBLODJtV1RQeUFyUXB6WnpIZnpxckl4QU5iRmViT1lyNmRWWkhKdENqVlgzL0lIejU2MDVmeUpSdmJBNGZxMy80UVZWUmV2bVREQTM1UTViTDFhOTZxOW9wTVhQUmc1YkwxYTk2cTlvcE1YUFJnNWM3bEYrYlRuVWxGSmk1NnNITG44Z3Z6NmM2a0loTVhQVmg1elZ2ZmZQS2Q5WXRzZU1ERGxkZTg5YzBuMzFtL3lNYjJ3TUgrZGk1VlQ3L21pV3hlSHhvK3BPWlM5ZlJybnNpbUQyN2wva1R0Ri9ZbkZabDRZQ3YzSjJxL3NEK3A2T1EvNS92RFA0M3ZELzgwUHZhSC93YUNicDNOdFZldzVnQUFBQUJKUlU1RXJrSmdnZz09IiB5PSI1LjUiLz48cmVjdCBmaWxsPSIjMDAwMDAwIiBoZWlnaHQ9IjExOC40NTMxIiBzdHlsZT0ic3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjE7IiB3aWR0aD0iNTMyIiB4PSIwIiB5PSI3MyIvPjx0ZXh0IGZpbGw9IiMzM0ZGMDIiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjEyIiBmb250LXN0eWxlPSJpdGFsaWMiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmciIHRleHRMZW5ndGg9IjEyOC4wMDk4IiB4PSI1IiB5PSI5MCI+UGxhbnRVTUwgMS4yMDI1LjQ8L3RleHQ+PHJlY3QgZmlsbD0iIzMzRkYwMiIgaGVpZ2h0PSIyMS4yOTY5IiBzdHlsZT0ic3Ryb2tlOiMzM0ZGMDI7c3Ryb2tlLXdpZHRoOjE7IiB3aWR0aD0iMTczLjI4MTMiIHg9IjUiIHk9Ijk5Ljk2ODgiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZyIgdGV4dExlbmd0aD0iMTcxLjI4MTMiIHg9IjYiIHk9IjExNC45Njg4Ij5bRnJvbSBzdHJpbmcgKGxpbmUgMikgXTwvdGV4dD48dGV4dCBmaWxsPSIjMzNGRjAyIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgZm9udC13ZWlnaHQ9ImJvbGQiIGxlbmd0aEFkanVzdD0ic3BhY2luZyIgdGV4dExlbmd0aD0iNC44NzQiIHg9IjUiIHk9IjEzNS4yNjU2Ij4mIzE2MDs8L3RleHQ+PHRleHQgZmlsbD0iIzMzRkYwMiIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmciIHRleHRMZW5ndGg9IjgxLjQyMjkiIHg9IjUiIHk9IjE1MS41NjI1Ij5Ac3RhcnR1bWw8L3RleHQ+PHRleHQgZmlsbD0iIzMzRkYwMiIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIGZvbnQtd2VpZ2h0PSJib2xkIiBsZW5ndGhBZGp1c3Q9InNwYWNpbmciIHRleHQtZGVjb3JhdGlvbj0id2F2eSB1bmRlcmxpbmUiIHRleHRMZW5ndGg9IjExLjczMDUiIHg9IjUiIHk9IjE2Ny44NTk0Ij4rPC90ZXh0Pjx0ZXh0IGZpbGw9IiNGRjAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmb250LXdlaWdodD0iYm9sZCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nIiB0ZXh0TGVuZ3RoPSIzOTIuMzM1IiB4PSI5Ljg3NCIgeT0iMTg0LjE1NjMiPlN5bnRheCBFcnJvcj8gKEFzc3VtZWQgZGlhZ3JhbSB0eXBlOiBzZXF1ZW5jZSk8L3RleHQ+PHJlY3QgZmlsbD0iI0ZGRkZGRiIgaGVpZ2h0PSI3MyIgc3R5bGU9InN0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDoxOyIgd2lkdGg9IjUzMiIgeD0iMCIgeT0iMTkxLjQ1MzEiLz48aW1hZ2UgaGVpZ2h0PSI1MyIgd2lkdGg9IjQ1MCIgeD0iMSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFjSUFBQUExQ0FNQUFBRGxKaHRpQUFBREFGQk1WRVg0WjFRQU9wRC8vOXRtdHYvYi8vOEFBRG82QUFELy8vOEFBQUFBTEVuYmtEcVEyLytRT2dBNmtOdTJaZ0JtQUFEL3RtYi8vN2IvMjVBQVpyWUFBR2EyLy8vL2FWUUFKMGo1WjFUL2FsU3ZWVkFBSTBabU9nQTZacEQzWjFRNlpyYmJ0bWEyMi8rMlpqcjNabE1BT21iKy8vLy8yN1lBT2pyYnRwRDRabFMyMjl0bXR0czZrTFlBWnBDMmtEcG1rTnY0WmxQL2JWU1FaanJiLzlzQUtrZzZBRHI0WjFQM1ZrSDNabFQzVlQvM1ZrRDNXRU1RTUVtaFVrODZrSkE2T2dDMmtHWTZabWIzWUV6M1hrbjNaVkgzWEVmM1kwLzNXMGIzVjBMM1pWTDNaRkgvdHBCbVptYVEyOXZiMjVCbWtMYVF0dHUyMjVEYi83WUFabWIrOWZUM1hVajVnWEgzWGtyM1ZqLzNXRUw3dkxQM1hFajNWVUQzWDB2NFpGRDNYMHIvLy83M1lVMzNaRkQ3WjFUYmtHYVFaZ0NRa0RwbXRwQm1PanJiMjdiNFcwYjVnM1A1bElYM1lrNzk1K1QzWDBuM1dVWDVpM3Y2bG9qNm41TDRiVnI3eDhEM1lVNzNaRS83dmJYOHZMVDNVejcrKy92M1oxUDZsWWYzWFVmOTM5cis3T3IrOVBMKytmajNWRC82a29QKzl2WDdxNS82bDRuN3VhLzh4Yjc0WGtuOTV1UDJWa0QrL1B2M1drYjJXRVA3c0tiN3U3TDkydFg5NHQzNWhIWDh3N3o5MmRQNnBabjgwTW40YUZQNWYyLzNhVlgvL3YvN3I2VDVuSS80YUZYKy8vNzNZVXorL3Y3M1drWDh6c2Y1WjFQNWRHTDd1ckg5M05mOTcrMysvUHIzV1VUN3Y3Yis3dXYyVlQvOTZ1ZjZucEg1aG5iK2FGTUFJa2I5OXZUM1YwRUFLRWozY0Y0QUprZjd1YkRmWVZHelZsRDRobmF0VkZDWFQwOEFIMGIvYVZQOHk4VCsrL3FhVUUvKzcrMEFJa2VvVTFENFlVMzNYVW40Y21EM1kxRDRiVnY0ZW1pMnRwQ1F0di8vMjl2YjIvKzJrSkRiMjl1MnR0dTIyN1k2QUdZNk9wQzIvOXRtdHJhUWtHWUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBbXZhVG5BQUFOUmtsRVFWUjRYdTJjYTR3a1JSM0FxNTh6MHpPekE3ZTd6TDV1TnNleXgvdGlJc0tlaEdEQzQrQ1E2Q2RFQ0NKQmpZYnd3WVNFU0RTYUdJMkpnb2xma09BSDRnTmpWUGpBUXpRb0pJSjNFWElQUExnSGQ5enR3czN1TGJPM3U3UHo2cTUrV05WVlhkMWQwek05dTduWlJ6Sy81TGFycStwZi8vL1V2N29lTS84K0lRRjZiRzNrMEowZXV1dVUzaWpZVUVRK284ZFdvK2ZDTFUvUGhWdWVMcm93UFNoY1l2R1pQUzQ0M1hPaFpwWEFwdzZmRzAzS2xvRWtaTUNvRWVkelhMTkhpSzY0Y0hnWDZtZGRWN1JyazN4UkpOQjBMNGEyd0JWUTl1OSthRW9RN0NITHE5a0tPZ1RTRHFvMkxLaHVuamFJTXhOR1g2am1wa1RLcnNWSUlYUWlZSWVLd296L2x6SUY5cnQ1NmFPaGJCQnhxRWpVVlJOcVNjRjZhNWZFbDBXaDJXVUpWMHhYc2hXK0RPQnNPdEIwS1V0cjhtaTJiYUNoZ0hTVzBaMWtLd2I2bytPcVVETXpRbG16RmJkazR5R1dSdUtadjBxazBMemtUV09GM3g0ZVJtaFB2c0NLcG5ZT1BGYnZIM3RzV1p0UXBPWHJ6N0lDL215SlRKRXpxcDRWeEJYNFRHY1B1VnE3eUgyNlpJdFpFS1NXaEpOL2V4YU1OeklwaDlia2tYVUpTV0tkK0U2MWRCSDlFUkkyNnJMRzdtTzZxRGhMZW1lMmRCdGlhU1JaWVUxR1JvczBvSlJHL09TN1F6Umo0dmFMYnBxcVRtM2ZidTY2N2ZQM1huMzlmNjhQMVErVGt4WVdnVkRuQnB1RVZ6RjR0V0FqSDZTRWtDTnNjWWxtMVFCNEFNK0M2QytkQjExeTh6Y0FjTkphV01RMTNWYTRSZE8ya0xkOG5WWVNRSHRjUUI4dVpmenYwRFlKbFd4cmVuamJHTlJFVUtNclI5Z3hpQlp3SnB0Q2xxT2NvV0NLS1hCTU9JcmJJSlpTQWFiVmJVaW9aNXFNN0lEb2lmU1NQOEx2bzhzUHYrWE11ZmNUUTQrSUQ3SmFUNTA0Y2dZR0psTitJazFYRW9hR1Z5M3JxbU0wQTAyUUVzU3pLODVWVGNtR2FQK2llZE1HTHNKWjVJckt3V2pSclVlS29WWkZVK0o0VWJmZEdrQkxsd0JBczJOaVJjclVIRnQyV3gwLzdhaEtBK0xlZFNla2RHWG56SXJVVjhrNldEazNSY2NabEZDRkJRMnBBOE5GaUdkalR5T1RJOVVrNUkzMHN1ckpvdm5iOVEvNklDemxLVUJyaTBUSEY3YVVOTUMwa29ZeXhQelYwc0tGc29VL3pEYWJ1UERXb1MvZkR3cVBQOExxUFRKLzVCQzdhWEpocW9HWEl2WkJxYWw0Z1pScy9Ja1ZBM1ZSMlZzQWdkdGpaZndQZlpxcVBTZ1hVUXRqMWpuV29acGQrSU56VjJsczFuUnJvbDdKRHh5dlNyYVd2T2tWMGZVbDdwekI3Q21zQWxBWHBob3dZVTlNSndXSXJYRk44b2sxcUg3SEd5WmFldnNxSWg1SW5rYUp5Ym0xMHBXK2JKRlk3OHBLOXEydkQ4cm44RmdNcER3Rkl5ZlM5enp2ZGpDeWxLcWhrbjJrb1dDWHJZTG90VEF0T2xoWnlnRjQ3Tzc5eGpYM1BmUHk4cXQrdlhmdTJGbGNaSGY4MEhFY3ZCU1plR2k1UUxVdWluaUJyS2lhQ0RWZFRnQzBac2w2em52SzVHWGRRdjlFZFdtaXBKUlhBSlEwdmQ3QXM2cUxXbHQ4OWplREE2ZElUVEZqcE05WGhMUnBLd016MGxpMVl0dFdXdDg1WDE4RWNsckZacnRyaW1Ra2t2b1NkT3FLaWF4eFRXTEVHUVRreHMwSEx5dERVYXFQMVF3MFNxaEdKa2VHdW14ZFBJc0dHSk1WblkrUTlhcVJzRmxLcHdvYWN2NWtwbkxRQk5SU0Z5WkpHZ0tpWVVldmErM3B3SVVUd3RUOTRPVmdOUUQyall3Y1lUZThDMFVUN1NOb2QyS3lndUtBc2JJcW9QR0xiTFlrcVNaWTQwTE5VNWNWZExFUDk1QXNMbVFVSk5WWHo0TmxsVDAyc2pYNTk2Zkw1MFZTTStPa1JOMDJWU01yTEs0NEMwQkFmU3hiSy9nRUtpTjNBckk3MG9DbVZwS0dqUWNVNmhnUi8ySEVHUVRsSFc5bVBsYmdGNDhCeDB4YW1xK1J5cEZQVmsrc2JML3hwTXBrVlN0ZEJ5azkyL0JUZlZRQlZCYXpJcGFpbHJvd1NkSVE2amR4TFM2TWw3a3kvK2pYK0R3QS9uck5WL0JxR1ltN0h0a0w3REVWNmdDT3pnRzhHVEhvenFPV1BuTnBhUDRsT3hIcmNLVms0ZTNOdERBY25QZyt1TTVmNXgxZEw2ZE5ZT0Jta3laUTBXQUdCdGtqbUZJRFh4b2lMblRLUUJlOTBTVmJ3Uk5xbkVFNWFicFBWRVNRaDRKb3F5R05SSTVVVTJwVE02K3BRZGtsZUhrajQzWXBUZmtLZ080dUM5UlNDcFdrRFZucVduWXpIYmh3NnZHSG4rWHpFRC8rN1A0Q24rZUJlaklYc2dhcUh6OUlQaVFjTmZwTWJEU3NXb0V0SjBKRk1uMjcxSVExZ201RzVvczdCak8wSkx5MU5VQnRSK1h1aElxNlI2K2pEMkREYkIveTFQaWdDWksyZUNlQXd5YnFKcmZ2R05ET2plOTJCSUh0QUdNTndoMmUrSjBvT2FueVpVeGpVQTZqN0xzVWVkaVRoVFpRMUJOV3ZSeElZUkdpZ0xxT1d1bzFRTFc2RFdtRG1WYkhqYmJFdW5EaW1BUyt5V2RpRHJVY01tWm95QU5RdlFLTWpmMFpiZXRSZDZ0RmZSbFVaVEFvSGJITGdSbDRJRFdNQnptb3lJblpqR2lmRTRRelNXWWIxNTV5QmpwQUdMblJGcEVKUzZvMVdnYVNOWE5XQU5XazlKcWd6amxvRnk5ODNSdnR1T2R6VXVXai9TSnJLTjZnVEJJUGpzdGtVSVBTRE5QSTVOdzZVRUZHaWt0TU5pZnR0cTA4UGhMNUtVK0JJbzVycEdWaXFZc25lVHRwU0pnM1duWnBPK0oycE9xZnFuY0Zhd1Q0emt2ZXhpcWM3MElPQWdGU2VNYzhYQlR6WjV2c2hGcGlHV2Zpd3dqYXY1K3o1VlJOdFBhKzBsVFJyV21qN2VGWmFiUTRjZExQVDJ1bHdWbGNIU2tBZUV2TGdYWVVleitrMW5xME1VaURpZUFSQkc5SWZZMnVITTIyaGdLNldBRktkZmpkOEFVaHpvVnplNTY0UFZqRHA3RG5nMytSVkpRTGVWQW5ybW5IM0RYV2FsQnJ1Y0I1RWNaT2JoZVFPRjJmV2FGUGZSTXoyNjlvdVJpRzBKS1RGaWlZNXRxaU9yckFXZzFxTHdmRkhKMHJVU3BjMUYzaVhEajgxRzE4bHNkWi8yVFlsbHIvU1ZtWUEzamgyaHlzMWFBWU9aSHR3Y1VXdjdoMGgxZ1hDaTBmdFlIcEdUNHJtck5ETndEcmN2NzB1SUdzMWFDMmNvcnVuUWxRS2x6VVhWcll3L2kyMk5KUGV1RS9mRllMWm1lQlNMNHQzU1NzMWFDMXluV1Z1S2Z3UjA3THAxQzdqcy9wc1JIRWZjRldmdXRvc0VLUTNhOEt5MjRpN2tudTBWWGlua0kxKzA4K3l5TTEwbktPN2JHT3hMbndxRlhsc3p3T2VMOEg5OWhRWWlkQklmaTFiSkNmMXA3anMzcHNCSEZQSWZqWS9pV2ZSU2llZ0h4V2o0MGdianRUS1NVbjNzdVJiVXVJSjk0NGRvWW1ZNS9rSHQwazlpa0UrMTcvZWZPMnBRQldzbGsrczhlR0VPL0Nvd2ZzNTBEaHErSE1tU2NQL2lNUVBkTmpBNG1kU0FFb0hUL3dnK2ZMNGJuMFM0ZGU5MithSnRKRXFoNC9ORENhMUNBVldZS1FNcFJXdTZnMnJFS0swN2VsNmNDRllDN3g0ZmZ1ZXJHd2wwYkxGSlovY1pWK09QQWROKzlDRFN4MUZnUUNKVWhDV2xqQ3k3ZFk3RlRuckVLSzA3ZTE0YnMva2xOcTRzbW5jL2ZSdTBlUFB6LzVOdmY3YVFqODZ6dUJScCszQ2tKUG1tbnkweXBMRUhLMjZVVDlITkNxSFVJcnFRZzRmVDd0Tld4T09uSWhPUG96NDQxVHYvcWtmMjY0K3Vrbis3WTdielp2Y0FMWTRqYmFRWTZ1QkM0OCtFV0hjSUlpMUwwR3dyUm9oOUpLcWhsZW4wOTdEWnVUVGlaU1JHbnh2ZjdpNlJOelM3UFcrZFB2dkI5ZUdQbGg0RGcxT2t0SmhvaW5ObkpKUVV2Y29kU0hLa0RLRE9CM0gwU2pTbzZXSk9HWHl4WnVBTzRxR2VIdEZtM0hNaU1uUVNLRkdWNHA0QUFFMUlCdFJWWGw5Zm02bUtWV29ZSXpIamdzcWxhYmxqWURzWUVYd2VJcnEvanA0MTlzYWdxOFNOVFZoRlpTcWlSTzN2M2tPQWpkWVZIcWlUcCtMWUZGV05ORUlKNjliZGk5NDRXeGMySHpMUEFoMVFBQXRjaGk0Ym5vK21aOVZOZS9QMGMxU0NSNkhzcjB2UURXRWpYRjFiSnBXTlhRT3VvNmovZGdNK1l0bFJLb3VGdWE2ZnlsK1BmUDZmd2s2b1diN2NGaG5PbkdkMm9PamlFRWdRUXJsM01hZ0xDVXYxcGVXSVIyLzkwMVVicTRUeUhOVFpweVpodlFGUHdUK2ZLVWh0L0JTQmRGT1VHa01PbGE1bDBjTVlnV1BGT1VSTDVhaEQ2cTYxcFBBOGhOR09tSEVpQlZIQnZHNFJTMEpXWUtrZDRzZERpUnRvVWJsVkMrL0tDcEtObFVqVVNmZStIeWZyeTZXMDJzMDlCQ0wrRkhzYmNOdS9jRDRNTmg4MjZ3dnRzT2RINHRXUmFrc2ZBV0YxM2ZyTS8yZEZFTmtFYlBXL1M5QUs4bHlFd2hobThTdXVEQ3JEQ1BwN1NhYlh0eDh1VGl4NnRqVW5xQ0xJUXN3Y3JiaDkyek1IWXViQjVMWVJkcWVDSzFMT0RGd2pmQzFTTDBzWUI3cXNHbTBmUGVld0ZlUzVwdnltYWlDOVlnNytOQWVTbnBSWit6SUhRYXBRNFQ5cjZJYVRRWXo5NHU3TjRMWStmQzVqMGNIYitDaVBmRkpCYWVxeGFoaitueUxYV2o1NzMzQXJ5V0FxWnNKcnJnUWdPazBVY3VYeVdNeUNUNm5Gd0NVZXEydVVmWGFTQVlTNFNpMk51RjNRZUM1NE5oOC9qK1ZpYzdZb0JyQU54OUFDOVlOQlkrVkMxQ254OXc3Mm53UE1uZUMzQmI4azNwTkdob1hXamh3cis4MElmNFBaL2RFWmRZZUtwVTNsOHBldEhuN3NXUFVsZlFQS3ZvOUVqb0pRSlI3SVJXWWZlQjRIa3ViQjZBdDhWMFVRWEhCWFgvUFdVdkZqNWNyVDlTSDlWRkxmV2k1NzMzQXJ5V2ZGTnVvVFp1Q3FMWHdudDN5b2Y2Ky91L3NDZnFoWmdtdUxXd3duNGxUdVpxZzFXSlhtVDl0Q1I0Ly9HQk9rbG1PejhCL1BLYW5OWFJaSnV2bk13djVOL0ZyMXVqQTRCUThwcHpRQlZOZm9LdG1CSTZYWnJDZVZUdUFBdExXV2p0TmtkWHdGaDZHc0NSc3BDdlNDQmNiU2xDbitIcE9rODFXR1gzZEFVMVE3RHVmQWQ2TFgzRVRJa081OTRnb3MrRjRPR1gzTXM4SzJrSGZ5Nk1KdTRkMXJqeUM4MTY2K3NhTFZ5NEtqcHlZZHoveUJGWGZxRlpiMzNkWS8yK2FSQVhJdi9IR0VaYytZVm12ZlYxalhWN0NudDBpeFk3MGg1Ymg1NEx0enpoaWJUSEZ1VC9tR3dBVWlqVlRZNEFBQUFBU1VWT1JLNUNZSUk9IiB5PSIyMDEuNDUzMSIvPjxpbWFnZSBoZWlnaHQ9IjYyIiB3aWR0aD0iNjIiIHg9IjQ1MCIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFENEFBQUErQ0FZQUFBQnp3YWhFQUFBQ3AwbEVRVlI0WHUzU1FhcGJRUXhFVWU5LzA4bms5K1NRaTlTMkF5SDJoUnFvcXFSK0JqOStmU2dQalUvaCs4TS9qZThQL3pUeWh6OGVqNmRVKzdlNDU3MnRpa3c4c0ZYdDMrS2U5N1lxTXBrVzViWi9XSC9va012VXoyUmFsTnYrNFovLzRYNWc1VFhyVHhKOSs1VVhtYmpvQTVYWHJEOUo5TzFYWG1UaW9nOVU3ano1cWpCM3IvSWlFeGQ5b0hMbnlWZUZ1WHVWRjVtNDZBT1ZPNWVtbnVqYnI3ekl4RVVmcU55NU5QVkUzMzdsUlNiVG9sUy9mTEUzelJOVFA1TnBVYXBmdnRpYjVvbXBuOGxadkpYNzc1NXZWV1RpZ2EzY2YvZDhxNktUTjFFZlVQNWh5bC9sNzEzK29YNUErWWNwZjVXODdGOUdpYjd6MWkrSnVUMW55Y1NEU3ZTZHQzNUp6TzA1U3lhMVdBK1pQenMvNngrbS9KQ05PbkQ4S1g5MmZ0WS9UUGxoYnZ6Z3dkdFp2L0tEK1RUZnN0NzBvZHRadi9LRCtUVGZNbTc2d0xNZnJsK2FzSGU3ZnhpYkh0dytWTG43YXNMZTdmNGhteDZjRHB2WG5yNjUyRk5UcjhqRUErT2g0VVBLTnhkN2F1b1ZuVUFkMHZkaHRlMXRWWXk1UmxHSDlQMHd0ZTF0Vll5NWhuaWdaalZoejNuQy92WDdHdUtobXRXRVBlY0orOWZ2YXh3OHNEMWNlZmtINzI5VmpMbkd3Y1ZYSHl6LzRQMnRpakhYbUtpSEozODc2Nytxb3BPZ0RrLytkdFovVlVVbkwrTERmdEJXaGZrMFN5Y3Y0c1Arb0swSzgybVdUUHlBclFwelp6SGZ6cXJJeEFOYkZlYk9ZcjZkVlpISnRDalZYMy9JSHo1NjA1ZnlKUnZiQTRmcTMvNFFWVlJldm1UREEzNVE1YkwxYTk2cTlvcE1YUFJnNWJMMWE5NnE5b3BNWFBSZzVjN2xGK2JUblVsRkppNTZzSExuOGd2ejZjNmtJaE1YUFZoNXpWdmZmUEtkOVl0c2VNRERsZGU4OWMwbjMxbS95TWIyd01IK2RpNVZUNy9taVd4ZUh4bytwT1pTOWZScm5zaW1EMjdsL2tUdEYvWW5GWmw0WUN2M0oycS9zRCtwNk9RLzUvdkRQNDN2RC84MFB2YUgvd2FDYnAzTnRWZXc1Z0FBQUFCSlJVNUVya0pnZ2c9PSIgeT0iMTk2Ljk1MzEiLz48IS0tU1JDPVtsTFZUSnpqTTU3X0ZOdDZibDhIUEY5Sjc4QXNRRDZhRlVxMlF6WlBEOFdLNzhmYWFTWG5qckpHZnJtUVEzcjFIQVIwRXNlb0Y0WTM1bUQ5SDJjSnZPc3hpRTRfejV0UkVsTlJZWDFaMm9ZUDVpTnMtcHhjX1N0bWlYSUdqZUlhb1FRLU5NZ3lrY1I3MVo2RWNOcDd6OHdEY2d0WGtCdkpRejRFaFNjTGpyYTlJSUZoWFluXzl3RVlObkRjZHBRbHBhMklrZDJIQ1Q0YmdPY1BNR3BlampMdVVYMkhuOVFFQTdEVHk1ZUhRODdjMDBQeWxGc2JYa0xLdGt3SGk2ZVhzZlRHd0FPR2FTSHFlWHBKODJmRkJRMzVEVFlDV09MTVV6YVlrVWJYOXBDYXBnWW1kRk9QaDk5bklPeWFQa0tDTGlPVkpNSk1qVEFkU0NIZzFrWm5IaVpBd2Q5b1NuNGl1dDRjU3F6OUFCQWJidm5IeXgxUVQ2S1Z5VG10N3F1dE5Kb01fWDJIMnhDa1NTcndwTnMtM21LVEh5a2F3cHVuekJkMGtuOVlIbm5rWGJRRkRvdHBCdDgwUlBFYmRKQnpXbmJpa0sxc3ZPR3laeVJsYWMzYmFIZXFQOVZwTkpyN2JUV2NVSk9fTGFGSWhCb0R6Wm5jQnA3Wjd6SnltZW05ZzhoTHhzWHRoM3RfaVdTaW45V3ZjS0MwMVhIYkVUNzBjenI3c01lR0dOb2luT3V0ZmtwbU5vZW5USGZVU0hqcWdfaTRlcTlTT0JPa001dktVSWxIY2UySmdyb3FtT3VLUDFqREZGaVZlZXMyWjczU3pGVTNoUTctM1VHTXZoUzQ2clRTdm9CVFVOZTZGT0FQUnNxMUdEVWpSVGR1NW14bjNmQ1NHMW4tX3dUVmx2eFoxcnhZclB4bkFZMEQ2M3AxWXhXWlp0LTR3bnZuczhheDBFSlk2NThSS2x1dGxjV1hxV1M0X3V5bTZDdFJ1VlZNMWRHVk9IeXkwYzZyLVZoTl9wN2NXWW83cl9TWldMWjJIUW14d1laWmhSWmgzb1p2U1RlNjg3ME9LMHVTTUZBd0FrSGhHTWR3SFZ6Y1REcXBxWnVMSE9aS002RnJ6ZUJRcl81a3BsaW5lbkxzRXoxVkVEaW9lSFF2TVVjcU5JZW5NeE5WUmkyYUR6YXdoeFRvVlpGeER3MTZaeXM4Q1hVeXlaeHh2VDZET21KaklySzlJREVYR25lN3RfU0pONHBYTmtDYUVFSUlmU2JnRVFKWTlrS1lSTmpaNUR2bjNJOVM3TjZsbHA1eFJ3NEpiWmZkOFRfQnFvQldoT2NfYmhERmRiYmJzVFhUOHYxalNZcGV5RmpDMFpUaXUxSDJTSC13UjJJcDRPckRRSWtzOE1nbEtnSHRYZzQzaXVhbnRFT2F1WUdaY25CVUZIdVdzQW9UOXZBY1M2SDVpejhBTEJBRUlhTlVMUDJLWmFxV29ySExnRGFweFVEVFo5d1NKeU13b3ZBVlAxMm9fNFFvNVBJdXJCblNWWnRKQnY3NmpYT0QtV1VZVFNDREpPRkdsZlhTUDFQcGF1TU9TcG93THhXRVdGbWI2Sm1HVWtKeUZWYjFZVXh0RXcya2Nic3ZnYzVPMVhBZjJKekloak5GZjcycTNOZGlyaUcwMXNjR29jUHVaUVpQOUQzY1pKSEFYby02LW1VWC0xbVZtbWFQaDVCdUV6aml2UTFqOFJITlhneHptZFR4N2J2OTgzbDNiamFTMVZEYmh4d3R3WmhTU3g0Q0pWUVI3VTRnVFlfdEZGZnphNHlocVc5ODJLQWdrb19vQUxJbUJlbTZVLWhwMGdtUFJ2T2daeG05V3lyTG85Z2w0TDN3QVJmNHB4S3R1TnhSTkZzOHVwdEtkUHEyaWxVZDQwVmZIT2ctVnNlVGJubTNxYzY5N3dfMEpGLUNvaldCakI3aEJPcW9kZlo5SF9ZUjQxVTBqVHJ2cFF4OU5pM1ZWVXU4UHhRYVlrbWxUOElfeTZwVFVWUHU3TS1QOTdGQ1BRZGVSOGlwR0d4d0tUeXhBajRmaEM5YUdfVk1wVGhkMUF1a1pqalVUd2V3U0EwYVFJX29KZTlpR1gyNW96cm5OZUNCMnlnVmhXY1NNRW1MRFVndFhZeWxMcS1UeDJwR3Jjcjl2dGp4SC1wLXR6TmJkVHlpZ0dadGNuUlU2aHNuWVZ0S19XcUZJRm0wMF0tLT48L2c+PC9zdmc+" class="uml" alt="uml diagram" title="" />

## コミット: b2b3e12

### メッセージ
docs: add architecture decision records and update documentation structure ```

変更されたファイル

  • A docs/reference/case-2/CLAUDE.local.md
  • A docs/reference/case-2/adr/.gitkeep
  • A docs/reference/case-2/adr/0001-adopt-typescript.md
  • A docs/reference/case-2/adr/0002-adopt-vitest.md
  • A docs/reference/case-2/adr/0003-adopt-canvas-api.md
  • A docs/reference/case-2/adr/0004-adopt-tdd-approach.md
  • A docs/reference/case-2/adr/0005-adopt-github-actions.md
  • A docs/reference/case-2/adr/0006-adopt-vercel.md
  • A docs/reference/case-2/adr/index.md
  • A docs/reference/case-2/development/.gitkeep
  • A docs/reference/case-2/development/index.md
  • A "docs/reference/case-2/development/\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243.md"
  • A "docs/reference/case-2/development/\343\202\242\343\203\274\343\202\255\343\203\206\343\202\257\343\203\201\343\203\243\350\250\255\350\250\210.md"
  • A "docs/reference/case-2/development/\343\203\207\343\203\274\343\202\277\343\203\242\343\203\207\343\203\253\350\250\255\350\250\210.md"
  • A "docs/reference/case-2/development/\343\203\211\343\203\241\343\202\244\343\203\263\343\203\242\343\203\207\343\203\253\350\250\255\350\250\210.md"
  • A "docs/reference/case-2/development/\343\203\246\343\203\274\343\202\266\343\203\274\343\202\244\343\203\263\343\202\277\343\203\274\343\203\225\343\202\247\343\203\274\343\202\271\350\250\255\350\250\210.md"
  • A "docs/reference/case-2/development/\345\256\237\350\243\205.md"
  • A "docs/reference/case-2/development/\350\250\255\350\250\210.md"
  • A "docs/reference/case-2/development/\351\226\213\347\231\272\350\250\210\347\224\273.md"
  • A docs/reference/case-2/index.md
  • A docs/reference/case-2/journal/20250731.md
  • A docs/reference/case-2/journal/20250802.md
  • A docs/reference/case-2/journal/20250804.md
  • A docs/reference/case-2/journal/20250805.md
  • A docs/reference/case-2/journal/index.md
  • A docs/reference/case-2/operation/.gitkeep
  • A "docs/reference/case-2/operation/MkDocs_GitHub_Actions\350\250\255\345\256\232.md"
  • A "docs/reference/case-2/operation/ci-cd\350\250\255\345\256\232.md"
  • A docs/reference/case-2/operation/index.md
  • A "docs/reference/case-2/operation/\343\202\273\343\203\203\343\203\210\343\202\242\343\203\203\343\203\227.md"
  • A docs/reference/case-2/reference/.gitkeep
  • A "docs/reference/case-2/reference/\343\202\210\343\201\204\343\202\275\343\203\225\343\203\210\343\202\246\343\202\247\343\202\242\343\201\250\343\201\257.md"
  • A "docs/reference/case-2/reference/\343\202\242\343\202\270\343\203\243\343\202\244\343\203\253\343\201\252\350\246\213\347\251\215\343\201\250\350\250\210\347\224\273\343\201\245\343\201\217\343\202\212.md"
  • A "docs/reference/case-2/reference/\343\202\250\343\202\257\343\202\271\343\203\210\343\203\252\343\203\274\343\203\240\343\203\227\343\203\255\343\202\260\343\203\251\343\203\237\343\203\263\343\202\260.md"
  • A "docs/reference/case-2/reference/\343\203\206\343\202\271\343\203\210\351\247\206\345\213\225\351\226\213\347\231\272\343\201\213\343\202\211\345\247\213\343\202\201\343\202\213TypeScript\345\205\245\351\226\2001.md"
  • A "docs/reference/case-2/reference/\343\203\206\343\202\271\343\203\210\351\247\206\345\213\225\351\226\213\347\231\272\343\201\213\343\202\211\345\247\213\343\202\201\343\202\213TypeScript\345\205\245\351\226\2002.md"
  • A "docs/reference/case-2/reference/\343\203\206\343\202\271\343\203\210\351\247\206\345\213\225\351\226\213\347\231\272\343\201\213\343\202\211\345\247\213\343\202\201\343\202\213TypeScript\345\205\245\351\226\2003.md"
  • A "docs/reference/case-2/reference/\351\226\213\347\231\272\343\202\254\343\202\244\343\203\211.md"
  • A docs/reference/case-2/report/index.md
  • A "docs/reference/case-2/report/\350\251\225\344\276\241\343\203\254\343\203\235\343\203\274\343\203\210.md"
  • A docs/reference/case-2/requirements/.gitkeep
  • A docs/reference/case-2/requirements/index.md
  • A "docs/reference/case-2/requirements/\350\246\201\344\273\266.md"
  • A docs/reference/case-2/template/ADR.md
  • A docs/reference/case-2/template/README.md
  • M mkdocs.yml

変更内容

```diff commit b2b3e12a90eb21929ac5031aafa3005dd6c81e82 Author: k2works kakimomokuri@gmail.com Date: Tue Aug 5 11:50:31 2025 +0900

docs: add architecture decision records and update documentation structure

diff --git a/docs/reference/case-2/CLAUDE.local.md b/docs/reference/case-2/CLAUDE.local.md new file mode 100644 index 0000000..3eaab5f --- /dev/null +++ b/docs/reference/case-2/CLAUDE.local.md @@ -0,0 +1,570 @@ +# CLAUDE.local.md + +uml diagram