creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/connectors/ParaswapConnector.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"../interfaces/ILiquidityConnector.sol\";\n\nstruct ParaswapExtraData {\n    address target;\n    bytes data;\n}\n\ncontract ParaswapConnector is ILiquidityConnector {\n    error ParaswapSwapFailed(bytes error);\n\n    function addLiquidity(AddLiquidityData memory) external payable override {\n        revert(\"Not implemented\");\n    }\n\n    function removeLiquidity(RemoveLiquidityData memory)\n        external\n        pure\n        override\n    {\n        revert(\"Not implemented\");\n    }\n\n    function swapExactTokensForTokens(SwapData memory swapData)\n        external\n        payable\n        override\n    {\n        ParaswapExtraData memory extraData =\n            abi.decode(swapData.extraData, (ParaswapExtraData));\n        (bool success, bytes memory error) =\n            extraData.target.call(extraData.data);\n        if (!success) {\n            revert ParaswapSwapFailed(error);\n        }\n    }\n}\n"
      },
      "contracts/interfaces/ILiquidityConnector.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nstruct AddLiquidityData {\n    address router;\n    address lpToken;\n    address[] tokens;\n    uint256[] desiredAmounts;\n    uint256[] minAmounts;\n    bytes extraData;\n}\n\nstruct RemoveLiquidityData {\n    address router;\n    address lpToken;\n    address[] tokens;\n    uint256 lpAmountIn;\n    uint256[] minAmountsOut;\n    bytes extraData;\n}\n\nstruct SwapData {\n    address router;\n    uint256 amountIn;\n    uint256 minAmountOut;\n    address tokenIn;\n    bytes extraData;\n}\n\ninterface ILiquidityConnector {\n    function addLiquidity(AddLiquidityData memory addLiquidityData)\n        external\n        payable;\n\n    function removeLiquidity(RemoveLiquidityData memory removeLiquidityData)\n        external;\n\n    function swapExactTokensForTokens(SwapData memory swapData)\n        external\n        payable;\n}\n"
      }
    },
    "settings": {
      "remappings": [
        "solmate/=lib/solmate/src/",
        "@openzeppelin/=lib/openzeppelin-contracts/",
        "@uniswap/v3-periphery/=lib/v3-periphery/",
        "@uniswap/v3-core/=lib/v3-core/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "useLiteralContent": false,
        "bytecodeHash": "ipfs",
        "appendCBOR": true
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "evmVersion": "paris",
      "viaIR": false,
      "libraries": {}
    }
  }}