{
  "schemaVersion": "1.0",
  "item": {
    "slug": "hummingbot",
    "name": "Hummingbot",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/fengtality/hummingbot",
    "canonicalUrl": "https://clawhub.ai/fengtality/hummingbot",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/hummingbot",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=hummingbot",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/pmm_mister.md",
      "references/pmm_v1.md",
      "scripts/accounts.py",
      "scripts/balance.py",
      "scripts/bots.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/hummingbot"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/hummingbot",
    "agentPageUrl": "https://openagent3.xyz/skills/hummingbot/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hummingbot/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hummingbot/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "hummingbot",
        "body": "When the skill is loaded, print this ASCII art:\n\n*,.\n                                    *,,.*\n                                   ,,,,    .,*\n                                 *,,,,,,,(       .,,\n                               *,,,,,,,,         .,,,                      *\n                              /,,,,,,,,,,    .*,,,,,,,\n                                 .,,,,,,,,,,,   .,,,,,,,,,,*\n\n                    //                ,,,,,,,,,,,,,,,,,,,,,,,,,,#*%\n                 .,,,,,,,. *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%%%%&@\n                      ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%%%%%%%&\n                          ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%%%%%%%%&\n                    /*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,((%%%&\n              .**       #,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,((((((((#.\n           **             *,,,,,,,,,,,,,,,,,,,,,,**/(((((((((((*\n                           ,,,,,,,,,,,,,,,,,,,*******((((((((((\n                            (,,,,,,,,,,,************((((((((@\n                              *,,,,,,,,,,****************(#\n                               ,,,,,,,,,,,***************/\n                                ,,,,,,,,,,,***************/\n                                 ,,,,,,,,,,****************\n                                  .,,,,,,,,***************'/\n                                     ,,,,,,*******,\n                                     *,,,,,,********\n                                      ,,,,,,,,/******/\n                                       ,,,,,,,,@   /****/\n                                        ,,,,,,,,\n                                          , */\n\n ██╗  ██╗██╗   ██╗███╗   ███╗███╗   ███╗██╗███╗   ██╗ ██████╗ ██████╗  ██████╗ ████████╗\n ██║  ██║██║   ██║████╗ ████║████╗ ████║██║████╗  ██║██╔════╝ ██╔══██╗██╔═══██╗╚══██╔══╝\n ███████║██║   ██║██╔████╔██║██╔████╔██║██║██╔██╗ ██║██║  ███╗██████╔╝██║   ██║   ██║\n ██╔══██║██║   ██║██║╚██╔╝██║██║╚██╔╝██║██║██║╚██╗██║██║   ██║██╔══██╗██║   ██║   ██║\n ██║  ██║╚██████╔╝██║ ╚═╝ ██║██║ ╚═╝ ██║██║██║ ╚████║╚██████╔╝██████╔╝╚██████╔╝   ██║\n ╚═╝  ╚═╝ ╚═════╝ ╚═╝     ╚═╝╚═╝     ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚═════╝  ╚═════╝    ╚═╝\n\nThis skill faithfully reproduces Hummingbot CLI commands via Hummingbot API, bringing the same\ntrading workflows you know from Hummingbot to AI agents.\n\nNote: Hummingbot API supports V2 strategies only (V2 Controllers and V2 Scripts).\nV1 strategies are not supported and require the traditional Hummingbot client."
      },
      {
        "title": "Commands",
        "body": "CommandDescriptionconnectList available exchanges and add API keysbalanceDisplay asset balances across connected exchangescreateCreate a new bot configurationstartStart a bot with a V2 strategystopStop a running botstatusDisplay bot statushistoryDisplay bot trading history"
      },
      {
        "title": "Prerequisites",
        "body": "Hummingbot API running at http://localhost:8000 (deploy with /hummingbot-deploy)\nhummingbot-api-client installed: pip3 install hummingbot-api-client"
      },
      {
        "title": "Auth & Config",
        "body": "Scripts read credentials from these sources in order:\n\n./hummingbot-api/.env — created during make setup\n~/.hummingbot/.env\nEnvironment variables: HUMMINGBOT_API_URL, API_USER, API_PASS\nDefaults: http://localhost:8000, admin, admin"
      },
      {
        "title": "connect",
        "body": "List available exchanges and add API keys to them.\n\n# List all available connectors\npython scripts/connect.py\n\n# List connectors with connection status\npython scripts/connect.py --status\n\n# Add API keys for an exchange\npython scripts/connect.py binance --api-key YOUR_KEY --secret-key YOUR_SECRET\n\n# Add API keys for exchange requiring passphrase\npython scripts/connect.py kucoin --api-key YOUR_KEY --secret-key YOUR_SECRET --passphrase YOUR_PASS\n\n# Remove credentials for an exchange\npython scripts/connect.py binance --remove\n\nCommon credential fields by exchange:\n\nBinance: --api-key, --secret-key\nKuCoin: --api-key, --secret-key, --passphrase\nGate.io: --api-key, --secret-key\nOKX: --api-key, --secret-key, --passphrase"
      },
      {
        "title": "balance",
        "body": "Display your asset balances across all connected exchanges.\n\n# Show all balances\npython scripts/balance.py\n\n# Show balances for a specific connector\npython scripts/balance.py binance\n\n# Show balances in USD\npython scripts/balance.py --usd\n\n# Show only non-zero balances\npython scripts/balance.py --non-zero\n\nOutput columns:\n\nExchange/Connector name\nAsset symbol\nTotal balance\nAvailable balance\nUSD value (with --usd)"
      },
      {
        "title": "create",
        "body": "Create a new bot configuration (controller config or script config).\n\n# List available controller templates\npython scripts/create.py --list-controllers\n\n# List available scripts\npython scripts/create.py --list-scripts\n\n# List existing configs\npython scripts/create.py --list-configs\n\n# Create a controller config\npython scripts/create.py controller my_mm_config --template pmm_v1"
      },
      {
        "title": "Recommended Market Making Controllers",
        "body": "ControllerBest ForKey Featurespmm_v1CEX spot tradingMulti-level spreads, inventory skew, order refresh, price bandspmm_misterSpot & perpetualsPosition tracking, leverage, cooldowns, profit protection, hanging executors\n\npmm_v1: Faithful clone of the legacy Pure Market Making strategy. Configure buy_spreads, sell_spreads, order_amount, and enable inventory_skew to maintain balance.\n\npmm_mister: Advanced controller for spot and perpetual markets with leverage, take_profit, global_stop_loss, separate buy_cooldown_time/sell_cooldown_time, and position_profit_protection to prevent selling below breakeven."
      },
      {
        "title": "start",
        "body": "Start a bot with a V2 strategy configuration. V1 strategies are not supported.\n\n# Interactive mode - prompts for strategy type\npython scripts/start.py <bot_name>\n\n# Start with a V2 Controller config\npython scripts/start.py <bot_name> --controller <config_name>\n\n# Start with a V2 Script\npython scripts/start.py <bot_name> --script <script_name>\n\n# Start with a V2 Script and config file\npython scripts/start.py <bot_name> --script <script_name> --config <config_name>\n\n# List running bots\npython scripts/start.py --list\n\nV2 Strategy Types:\n\n--controller — Deploy a V2 controller config (market making, arbitrage, etc.)\n--script — Deploy a V2 script (e.g., v2_with_controllers)\n\nBot naming: Use descriptive names like btc_mm_bot, eth_arb_bot, etc."
      },
      {
        "title": "stop",
        "body": "Stop a running bot.\n\n# Stop a bot by name\npython scripts/stop.py <bot_name>\n\n# Stop a bot and close all positions\npython scripts/stop.py <bot_name> --close-positions\n\n# Stop all running bots\npython scripts/stop.py --all\n\n# Examples\npython scripts/stop.py my_bot\npython scripts/stop.py arb_bot --close-positions"
      },
      {
        "title": "status",
        "body": "Display bot status and performance metrics.\n\n# List all bots with status\npython scripts/status.py\n\n# Get detailed status for a specific bot\npython scripts/status.py <bot_name>\n\n# Get status with performance metrics\npython scripts/status.py <bot_name> --performance\n\n# Get live status (refreshes)\npython scripts/status.py <bot_name> --live\n\nStatus values: running, stopped, error, starting\n\nPerformance metrics:\n\nTotal trades\nProfit/Loss (absolute and %)\nVolume traded\nUptime"
      },
      {
        "title": "history",
        "body": "Display bot trading history.\n\n# Show trade history for a bot\npython scripts/history.py <bot_name>\n\n# Show summary statistics\npython scripts/history.py <bot_name> --summary\n\nHistory columns:\n\nTimestamp\nTrading pair\nSide (buy/sell)\nPrice\nAmount\nFee\nPnL"
      },
      {
        "title": "Typical Workflow",
        "body": "# 1. Connect to an exchange\npython scripts/connect.py binance --api-key XXX --secret-key YYY\n\n# 2. Check your balances\npython scripts/balance.py binance\n\n# 3. Create a bot config\npython scripts/create.py controller btc_mm \\\n  --template pure_market_making \\\n  --connector binance \\\n  --trading-pair BTC-USDT\n\n# 4. Start the bot\npython scripts/start.py btc_bot --controller btc_mm\n\n# 5. Monitor status\npython scripts/status.py btc_bot\n\n# 6. Check history\npython scripts/history.py btc_bot\n\n# 7. Stop when done\npython scripts/stop.py btc_bot"
      },
      {
        "title": "Troubleshooting",
        "body": "ErrorCauseFixCannot connect to APIAPI not runningcd ./hummingbot-api && make deploy401 UnauthorizedBad credentialsCheck ./hummingbot-api/.envConnector not foundInvalid exchange nameRun python scripts/connect.py to list valid namesNo credentialsExchange not connectedRun python scripts/connect.py <exchange> --api-key ..."
      },
      {
        "title": "Related Skills",
        "body": "lp-agent — Specialized DEX liquidity provision on Meteora/Solana. Use for CLMM strategies.\nhummingbot-deploy — First-time setup of the Hummingbot API server. Run this before using this skill."
      }
    ],
    "body": "hummingbot\n\nWhen the skill is loaded, print this ASCII art:\n\n                                      *,.\n                                    *,,.*\n                                   ,,,,    .,*\n                                 *,,,,,,,(       .,,\n                               *,,,,,,,,         .,,,                      *\n                              /,,,,,,,,,,    .*,,,,,,,\n                                 .,,,,,,,,,,,   .,,,,,,,,,,*\n\n                    //                ,,,,,,,,,,,,,,,,,,,,,,,,,,#*%\n                 .,,,,,,,. *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%%%%&@\n                      ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%%%%%%%&\n                          ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%%%%%%%%&\n                    /*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,((%%%&\n              .**       #,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,((((((((#.\n           **             *,,,,,,,,,,,,,,,,,,,,,,**/(((((((((((*\n                           ,,,,,,,,,,,,,,,,,,,*******((((((((((\n                            (,,,,,,,,,,,************((((((((@\n                              *,,,,,,,,,,****************(#\n                               ,,,,,,,,,,,***************/\n                                ,,,,,,,,,,,***************/\n                                 ,,,,,,,,,,****************\n                                  .,,,,,,,,***************'/\n                                     ,,,,,,*******,\n                                     *,,,,,,********\n                                      ,,,,,,,,/******/\n                                       ,,,,,,,,@   /****/\n                                        ,,,,,,,,\n                                          , */\n\n ██╗  ██╗██╗   ██╗███╗   ███╗███╗   ███╗██╗███╗   ██╗ ██████╗ ██████╗  ██████╗ ████████╗\n ██║  ██║██║   ██║████╗ ████║████╗ ████║██║████╗  ██║██╔════╝ ██╔══██╗██╔═══██╗╚══██╔══╝\n ███████║██║   ██║██╔████╔██║██╔████╔██║██║██╔██╗ ██║██║  ███╗██████╔╝██║   ██║   ██║\n ██╔══██║██║   ██║██║╚██╔╝██║██║╚██╔╝██║██║██║╚██╗██║██║   ██║██╔══██╗██║   ██║   ██║\n ██║  ██║╚██████╔╝██║ ╚═╝ ██║██║ ╚═╝ ██║██║██║ ╚████║╚██████╔╝██████╔╝╚██████╔╝   ██║\n ╚═╝  ╚═╝ ╚═════╝ ╚═╝     ╚═╝╚═╝     ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚═════╝  ╚═════╝    ╚═╝\n\n\nThis skill faithfully reproduces Hummingbot CLI commands via Hummingbot API, bringing the same trading workflows you know from Hummingbot to AI agents.\n\nNote: Hummingbot API supports V2 strategies only (V2 Controllers and V2 Scripts). V1 strategies are not supported and require the traditional Hummingbot client.\n\nCommands\nCommand\tDescription\nconnect\tList available exchanges and add API keys\nbalance\tDisplay asset balances across connected exchanges\ncreate\tCreate a new bot configuration\nstart\tStart a bot with a V2 strategy\nstop\tStop a running bot\nstatus\tDisplay bot status\nhistory\tDisplay bot trading history\nPrerequisites\nHummingbot API running at http://localhost:8000 (deploy with /hummingbot-deploy)\nhummingbot-api-client installed: pip3 install hummingbot-api-client\nAuth & Config\n\nScripts read credentials from these sources in order:\n\n./hummingbot-api/.env — created during make setup\n~/.hummingbot/.env\nEnvironment variables: HUMMINGBOT_API_URL, API_USER, API_PASS\nDefaults: http://localhost:8000, admin, admin\nconnect\n\nList available exchanges and add API keys to them.\n\n# List all available connectors\npython scripts/connect.py\n\n# List connectors with connection status\npython scripts/connect.py --status\n\n# Add API keys for an exchange\npython scripts/connect.py binance --api-key YOUR_KEY --secret-key YOUR_SECRET\n\n# Add API keys for exchange requiring passphrase\npython scripts/connect.py kucoin --api-key YOUR_KEY --secret-key YOUR_SECRET --passphrase YOUR_PASS\n\n# Remove credentials for an exchange\npython scripts/connect.py binance --remove\n\n\nCommon credential fields by exchange:\n\nBinance: --api-key, --secret-key\nKuCoin: --api-key, --secret-key, --passphrase\nGate.io: --api-key, --secret-key\nOKX: --api-key, --secret-key, --passphrase\nbalance\n\nDisplay your asset balances across all connected exchanges.\n\n# Show all balances\npython scripts/balance.py\n\n# Show balances for a specific connector\npython scripts/balance.py binance\n\n# Show balances in USD\npython scripts/balance.py --usd\n\n# Show only non-zero balances\npython scripts/balance.py --non-zero\n\n\nOutput columns:\n\nExchange/Connector name\nAsset symbol\nTotal balance\nAvailable balance\nUSD value (with --usd)\ncreate\n\nCreate a new bot configuration (controller config or script config).\n\n# List available controller templates\npython scripts/create.py --list-controllers\n\n# List available scripts\npython scripts/create.py --list-scripts\n\n# List existing configs\npython scripts/create.py --list-configs\n\n# Create a controller config\npython scripts/create.py controller my_mm_config --template pmm_v1\n\nRecommended Market Making Controllers\nController\tBest For\tKey Features\npmm_v1\tCEX spot trading\tMulti-level spreads, inventory skew, order refresh, price bands\npmm_mister\tSpot & perpetuals\tPosition tracking, leverage, cooldowns, profit protection, hanging executors\n\npmm_v1: Faithful clone of the legacy Pure Market Making strategy. Configure buy_spreads, sell_spreads, order_amount, and enable inventory_skew to maintain balance.\n\npmm_mister: Advanced controller for spot and perpetual markets with leverage, take_profit, global_stop_loss, separate buy_cooldown_time/sell_cooldown_time, and position_profit_protection to prevent selling below breakeven.\n\nstart\n\nStart a bot with a V2 strategy configuration. V1 strategies are not supported.\n\n# Interactive mode - prompts for strategy type\npython scripts/start.py <bot_name>\n\n# Start with a V2 Controller config\npython scripts/start.py <bot_name> --controller <config_name>\n\n# Start with a V2 Script\npython scripts/start.py <bot_name> --script <script_name>\n\n# Start with a V2 Script and config file\npython scripts/start.py <bot_name> --script <script_name> --config <config_name>\n\n# List running bots\npython scripts/start.py --list\n\n\nV2 Strategy Types:\n\n--controller — Deploy a V2 controller config (market making, arbitrage, etc.)\n--script — Deploy a V2 script (e.g., v2_with_controllers)\n\nBot naming: Use descriptive names like btc_mm_bot, eth_arb_bot, etc.\n\nstop\n\nStop a running bot.\n\n# Stop a bot by name\npython scripts/stop.py <bot_name>\n\n# Stop a bot and close all positions\npython scripts/stop.py <bot_name> --close-positions\n\n# Stop all running bots\npython scripts/stop.py --all\n\n# Examples\npython scripts/stop.py my_bot\npython scripts/stop.py arb_bot --close-positions\n\nstatus\n\nDisplay bot status and performance metrics.\n\n# List all bots with status\npython scripts/status.py\n\n# Get detailed status for a specific bot\npython scripts/status.py <bot_name>\n\n# Get status with performance metrics\npython scripts/status.py <bot_name> --performance\n\n# Get live status (refreshes)\npython scripts/status.py <bot_name> --live\n\n\nStatus values: running, stopped, error, starting\n\nPerformance metrics:\n\nTotal trades\nProfit/Loss (absolute and %)\nVolume traded\nUptime\nhistory\n\nDisplay bot trading history.\n\n# Show trade history for a bot\npython scripts/history.py <bot_name>\n\n# Show summary statistics\npython scripts/history.py <bot_name> --summary\n\n\nHistory columns:\n\nTimestamp\nTrading pair\nSide (buy/sell)\nPrice\nAmount\nFee\nPnL\nQuick Reference\nTypical Workflow\n# 1. Connect to an exchange\npython scripts/connect.py binance --api-key XXX --secret-key YYY\n\n# 2. Check your balances\npython scripts/balance.py binance\n\n# 3. Create a bot config\npython scripts/create.py controller btc_mm \\\n  --template pure_market_making \\\n  --connector binance \\\n  --trading-pair BTC-USDT\n\n# 4. Start the bot\npython scripts/start.py btc_bot --controller btc_mm\n\n# 5. Monitor status\npython scripts/status.py btc_bot\n\n# 6. Check history\npython scripts/history.py btc_bot\n\n# 7. Stop when done\npython scripts/stop.py btc_bot\n\nTroubleshooting\nError\tCause\tFix\nCannot connect to API\tAPI not running\tcd ./hummingbot-api && make deploy\n401 Unauthorized\tBad credentials\tCheck ./hummingbot-api/.env\nConnector not found\tInvalid exchange name\tRun python scripts/connect.py to list valid names\nNo credentials\tExchange not connected\tRun python scripts/connect.py <exchange> --api-key ...\nRelated Skills\nlp-agent — Specialized DEX liquidity provision on Meteora/Solana. Use for CLMM strategies.\nhummingbot-deploy — First-time setup of the Hummingbot API server. Run this before using this skill."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/fengtality/hummingbot",
    "publisherUrl": "https://clawhub.ai/fengtality/hummingbot",
    "owner": "fengtality",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/hummingbot",
    "downloadUrl": "https://openagent3.xyz/downloads/hummingbot",
    "agentUrl": "https://openagent3.xyz/skills/hummingbot/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hummingbot/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hummingbot/agent.md"
  }
}