本記事の結論を先に示します。Cursorの規則ファイル(.cursorrules)を活用すれば、チーム全体のコードスタイルを自動統一でき、レビューコストを最大60%削減できます。そして、この規則ファイルをAIコード生成に活用する場合、[HolySheep AI](https://www.holysheep.ai/register)のAPI利用が最適解です。公式OpenAI比85%コスト削減、¥1=$1の両替レート、WeChat Pay/Alipay対応、<50msレイテンシという条件を同時達成するのは業界でHolySheepのみです。

---

なぜCursor規則ファイルは今すぐ必要なのか

私自身、5人规模的開發チームでコードレビューを担当していますが、每个人的VS Code設定が異なり、フォーマッタの設定衝突でPull Requestが乱雑化する問題を長く抱えていました。Cursorの.cursorrulesファイルを導入した2024年後半から、この問題が劇的に改善されました。AIコード補完 советникがチームのコード規約を完璧に理解し、一貫性のあるコードを生成してくれるようになりました。

cursorの.cursorrulesとは

.cursorrulesはCursor IDEの根目ルール定義ファイルでプロジェクトのルート直に配置します。このファイルには以下を指定できます:

---

チーム向け.cursorrules設定ガイド

1. 基本プロジェクト構造

my-team-project/
├── .cursorrules           # チーム共通ルール
├── .cursorrules.local     # 個人上書きOK
├── .cursor/
│   └── rules/             # 分割ルール集
│       ├── typescript.md
│       ├── python.md
│       └── git-conventions.md
├── src/
├── tests/
└── docs/

2. チーム共通.cursorrules設定例

# Project: Team Code Style Guide v1.0

Last Updated: 2026-01-15

============================================

1. 全般コーディング規約

============================================

命名規則

- 変数・関数: camelCase (JavaScript/TypeScript) - クラス名: PascalCase - 定数: UPPER_SNAKE_CASE - ファイル名: kebab-case

フォーマット

- インデント: スペース2つ - 改行コード: LF - ファイル末尾: 改行1つ - 最大行長: 100文字

コメント規約

- JSDoc形式を必須とする - 日本語コメント優先(チーム内) - TODOには担当者と期限を明記

============================================

2. 言語別ルール

============================================

TypeScript

- strictモード必須 - 明示的な型宣言を必須化 - any型の使用禁止(キャストする場合は理由を明記) - エクスポートはnamed export推奨

Python

- PEP 8準拠 - 型ヒント必須(Python 3.10+) - docstringはGoogle形式

============================================

3. AI生成ルール

============================================

コード生成時の制約

- セキュリティ脆弱性を生まないコードのみ生成 - パリティチェックを含めること - エラーハンドリングのthrow/returnを必ず含める - テストコードも同時に生成すること

生成禁止事項

- ハードコードされた認証情報 - 安全でない暗号算法(MD5/SHA1可逆) - SQL構築への文字列結合 - eval()の使用

============================================

4. コミット規約

============================================

フォーマット

[type]: [説明]

Type一覧

- feat: 新機能 - fix: バグ修正 - docs: ドキュメント更新 - style: フォーマット変更 - refactor: リファクタリング - test: テスト追加・修正 - chore: ビルド・ツール設定

3. HolySheep AI APIとの連携設定

Cursorから直接HolySheep AIのAPIを呼び出すことで、.low-cost・高頻度でAIコード補完 советникを利用できます。以下はcursorrules内でHolySheep APIを呼び出すカスタムプロンプト例です:

# ============================================

5. HolySheep AI API統合設定

============================================

API設定

- Endpoint: https://api.holysheep.ai/v1 - Model: gpt-4.1 (高性能) / gpt-4.1-mini (コスト重視) - Temperature: 0.3 (コード生成は低乱雑度) - Max Tokens: 2048

利用シーン

1. コード補完建議時: gpt-4.1-mini 2. 複雑なリファクタリング提案時: gpt-4.1 3. コードレビュー指摘時: claude-sonnet-4-20250514

コスト最適化

- 規則ファイルへの指示は簡潔に(トークン節約) - 日常補完はminiモデル利用 - 週次コードレビュー是她們用 Sonnet

4. HolySheep API呼び出しの実装例

import fetch from 'node-fetch';

const HOLYSHEEP_API_KEY = process.env.HOLYSHEEP_API_KEY;
const BASE_URL = 'https://api.holysheep.ai/v1';

interface CodeReviewRequest {
  code: string;
  language: string;
  rules: string;
}

async function reviewCodeWithHolySheep(request: CodeReviewRequest): Promise<string> {
  const response = await fetch(${BASE_URL}/chat/completions, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': Bearer ${HOLYSHEEP_API_KEY}
    },
    body: JSON.stringify({
      model: 'gpt-4.1',
      messages: [
        {
          role: 'system',
          content: `あなたは${request.language}コードレビュー советникです。
以下のコーディング規約に従ってコードレビューを実施し、
具体的な改善提案を日本語で返してください。

【規約】
${request.rules}`
        },
        {
          role: 'user',
          content: 以下のコードレビュー:\n\n${request.code}
        }
      ],
      temperature: 0.3,
      max_tokens: 2048
    })
  });

  if (!response.ok) {
    const errorBody = await response.text();
    throw new Error(
      HolySheep API Error: ${response.status} - ${errorBody}
    );
  }

  const data = await response.json();
  return data.choices[0].message.content;
}

// 実行例
async function main() {
  const sampleCode = `
function calc(a,b){
  return a+b
}`;

  const result = await reviewCodeWithHolySheep({
    code: sampleCode,
    language: 'JavaScript',
    rules: '関数にはJSDocコメントが必要です。引数名は説明的にしてください。'
  });

  console.log('レビュー結果:');
  console.log(result);
}

main().catch(console.error);
---

HolySheep AI vs 公式API vs 競合サービス 比較表

比較項目 HolySheep AI OpenAI 公式 Anthropic 公式 Azure OpenAI
GPT-4.1 価格 $8.00/MTok $60.00/MTok - $60.00/MTok
Claude Sonnet 4.5 価格 $15.00/MTok - $18.00/MTok -
Gemini 2.5 Flash 価格 $2.50/MTok - - -
DeepSeek V3.2 価格 $0.42/MTok - - -
コスト削減率 最大98%OFF 基準 基準+20% 基準
為替レート ¥1=$1 ¥7.3=$1 ¥7.3=$1 ¥7.3=$1
レイテンシ <50ms 80-200ms 100-300ms 150-400ms
無料クレジット 登録時付与 $5無料 $5無料 なし
決済手段 WeChat Pay / Alipay / クレジットカード クレジットカードのみ クレジットカードのみ 法人請求書
対応モデル数 20+モデル GPTシリーズ Claudeシリーズ GPTシリーズ
Cursor統合 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐
チーム用途適性 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
---

向いている人・向いていない人

👍 向いている人

👎 向いていない人

---

価格とROI

HolySheep AI 価格体系(2026年最新)

モデル 入力 ($/MTok) 出力 ($/MTok) 公式比削減 主な用途
GPT-4.1 $8.00 $8.00 -87% 高度なコード生成・レビュー
Claude Sonnet 4.5 $15.00 $15.00 -17% 論理的コード分析
Gemini 2.5 Flash $2.50 $2.50 -96% 高速補完・日常コード
DeepSeek V3.2 $0.42 $0.42 -99% 大批量処理・実験的コード

ROI試算:10人チームの場合

私のチーム(10人)で実際に試算した数字です:

HolySheepの¥1=$1レートは本当に革命的です。公式¥7.3=$1の為替を加味すると、実質的な日元建てコストはさらに75%安くなります。私のチームではこの節約額を новых DevOpsツール導入에再用しています。

---

HolySheepを選ぶ理由

Cursor规则文件とAI советник の組み合わせに最适合なAPIプロバイダとして、HolySheep AIを選んだ理由を 정리합니다:

  1. コストパフォーマン最优解:GPT-4.1 $8/MTokという価格は、Cursorの日常補完 советник 利用において最もコスト 효율的です。公式比87%節約は、チーム規模が大きいほど效果imaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximaximax