{
  "id": "bb4d52cffb65208c2aecf4dbe1518db0",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.10",
  "solcLongVersion": "0.6.10+commit.00c0fcaf",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/protocol/integration/exchange/OneInchExchangeAdapter.sol": {
        "content": "/*\n    Copyright 2020 Set Labs Inc.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n    SPDX-License-Identifier: Apache License, Version 2.0\n*/\n\npragma solidity 0.6.10;\npragma experimental \"ABIEncoderV2\";\n\n/**\n * @title OneInchExchangeAdapter\n * @author Set Protocol\n *\n * Exchange adapter for 1Inch exchange that returns data for trades\n */\n\ncontract OneInchExchangeAdapter {\n\n    /* ============ State Variables ============ */\n    \n    // Address of 1Inch approve token address\n    address public oneInchApprovalAddress;\n\n    // Address of 1Inch exchange address\n    address public oneInchExchangeAddress;\n\n    // Bytes to check 1Inch function signature\n    bytes4 public oneInchFunctionSignature;\n\n    /* ============ Constructor ============ */\n\n    /**\n     * Set state variables\n     *\n     * @param _oneInchApprovalAddress       Address of 1inch approval contract\n     * @param _oneInchExchangeAddress       Address of 1inch exchange contract\n     * @param _oneInchFunctionSignature     Bytes of 1inch function signature\n     */\n    constructor(\n        address _oneInchApprovalAddress,\n        address _oneInchExchangeAddress,\n        bytes4 _oneInchFunctionSignature\n    )\n        public\n    {\n        oneInchApprovalAddress = _oneInchApprovalAddress;\n        oneInchExchangeAddress = _oneInchExchangeAddress;\n        oneInchFunctionSignature = _oneInchFunctionSignature;\n    }\n\n    /* ============ External Getter Functions ============ */\n\n    /**\n     * Return 1inch calldata which is already generated from the 1inch API\n     *\n     * @param  _sourceToken              Address of source token to be sold\n     * @param  _destinationToken         Address of destination token to buy\n     * @param  _sourceQuantity           Amount of source token to sell\n     * @param  _minDestinationQuantity   Min amount of destination token to buy\n     * @param  _data                     Arbitrage bytes containing trade call data\n     *\n     * @return address                   Target contract address\n     * @return uint256                   Call value\n     * @return bytes                     Trade calldata\n     */\n    function getTradeCalldata(\n        address _sourceToken,\n        address _destinationToken,\n        address /* _destinationAddress */,\n        uint256 _sourceQuantity,\n        uint256 _minDestinationQuantity,\n        bytes memory _data\n    )\n        external\n        view\n        returns (address, uint256, bytes memory)\n    {   \n        bytes4 signature;\n        address fromToken;\n        address toToken;\n        uint256 fromTokenAmount;\n        uint256 minReturnAmount;\n\n        // Parse 1inch calldata and validate parameters match expected inputs\n        // solium-disable-next-line security/no-inline-assembly\n        assembly {\n            signature := mload(add(_data, 32))\n            fromToken := mload(add(_data, 36))\n            toToken := mload(add(_data, 68))\n            fromTokenAmount := mload(add(_data, 100))\n            minReturnAmount := mload(add(_data, 132))\n        }\n\n        require(\n            signature == oneInchFunctionSignature,\n            \"Not One Inch Swap Function\"\n        );\n\n        require(\n            fromToken == _sourceToken,\n            \"Invalid send token\"\n        );\n\n        require(\n            toToken == _destinationToken,\n            \"Invalid receive token\"\n        );\n\n        require(\n            fromTokenAmount == _sourceQuantity,\n            \"Source quantity mismatch\"\n        );\n\n        require(\n            minReturnAmount >= _minDestinationQuantity,\n            \"Min destination quantity mismatch\"\n        );\n\n        return (oneInchExchangeAddress, 0, _data);\n    }\n\n    /**\n     * Returns the address to approve source tokens to for trading. This is the TokenTaker address\n     *\n     * @return address             Address of the contract to approve tokens to\n     */\n    function getSpender()\n        external\n        view\n        returns (address)\n    {\n        return oneInchApprovalAddress;\n    }\n}"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/protocol/integration/exchange/OneInchExchangeAdapter.sol": {
        "OneInchExchangeAdapter": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_oneInchApprovalAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_oneInchExchangeAddress",
                  "type": "address"
                },
                {
                  "internalType": "bytes4",
                  "name": "_oneInchFunctionSignature",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "inputs": [],
              "name": "getSpender",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_sourceToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "_destinationToken",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "_sourceQuantity",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "_minDestinationQuantity",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "_data",
                  "type": "bytes"
                }
              ],
              "name": "getTradeCalldata",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "",
                  "type": "bytes"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "oneInchApprovalAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "oneInchExchangeAddress",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "oneInchFunctionSignature",
              "outputs": [
                {
                  "internalType": "bytes4",
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5060405161063538038061063583398101604081905261002f9161009b565b600080546001600160a01b03199081166001600160a01b039586161790915560018054909116929093169190911763ffffffff60a01b1916600160a01b60e09290921c919091021790556100f0565b80516001600160a01b038116811461009557600080fd5b92915050565b6000806000606084860312156100af578283fd5b6100b9858561007e565b92506100c8856020860161007e565b60408501519092506001600160e01b0319811681146100e5578182fd5b809150509250925092565b610536806100ff6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063334fc2891461005c57806364a6c8661461007a57806369fd263114610082578063c7868ace14610097578063e171fcab1461009f575b600080fd5b6100646100c1565b60405161007191906102f4565b60405180910390f35b6100646100d0565b61008a6100df565b6040516100719190610372565b6100646100ef565b6100b26100ad36600461022d565b6100fe565b60405161007193929190610308565b6000546001600160a01b031690565b6000546001600160a01b031681565b600154600160a01b900460e01b81565b6001546001600160a01b031681565b6020810151602482015160448301516064840151608485015160015460009586956060959194909391929091906001600160e01b0319808716600160a01b90920460e01b16146101695760405162461bcd60e51b815260040161016090610387565b60405180910390fd5b8d6001600160a01b0316846001600160a01b03161461019a5760405162461bcd60e51b815260040161016090610424565b8c6001600160a01b0316836001600160a01b0316146101cb5760405162461bcd60e51b8152600401610160906103f5565b8a82146101ea5760405162461bcd60e51b8152600401610160906103be565b8981101561020a5760405162461bcd60e51b815260040161016090610450565b50506001546001600160a01b03169c60009c50969a509598505050505050505050565b60008060008060008060c08789031215610245578182fd5b8635610250816104e8565b95506020870135610260816104e8565b94506040870135610270816104e8565b9350606087013592506080870135915060a087013567ffffffffffffffff811115610299578182fd5b80880189601f8201126102aa578283fd5b803591506102bf6102ba836104b8565b610491565b8281528a60208484010111156102d3578384fd5b6102e48360208301602085016104dc565b8093505050509295509295509295565b6001600160a01b0391909116815260200190565b600060018060a01b038516825260208481840152606060408401528351806060850152825b818110156103495785810183015185820160800152820161032d565b8181111561035a5783608083870101525b50601f01601f19169290920160800195945050505050565b6001600160e01b031991909116815260200190565b6020808252601a908201527f4e6f74204f6e6520496e636820537761702046756e6374696f6e000000000000604082015260600190565b60208082526018908201527f536f75726365207175616e74697479206d69736d617463680000000000000000604082015260600190565b60208082526015908201527424b73b30b634b2103932b1b2b4bb32903a37b5b2b760591b604082015260600190565b60208082526012908201527124b73b30b634b21039b2b732103a37b5b2b760711b604082015260600190565b60208082526021908201527f4d696e2064657374696e6174696f6e207175616e74697479206d69736d6174636040820152600d60fb1b606082015260800190565b60405181810167ffffffffffffffff811182821017156104b057600080fd5b604052919050565b600067ffffffffffffffff8211156104ce578081fd5b50601f01601f191660200190565b82818337506000910152565b6001600160a01b03811681146104fd57600080fd5b5056fea2646970667358221220e03135bacadc4643b483a736ed65077e84f246828efad0783dcd54e34a95c5f664736f6c634300060a0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x635 CODESIZE SUB DUP1 PUSH2 0x635 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x9B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP4 AND SWAP2 SWAP1 SWAP2 OR PUSH4 0xFFFFFFFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0xE0 SWAP3 SWAP1 SWAP3 SHR SWAP2 SWAP1 SWAP2 MUL OR SWAP1 SSTORE PUSH2 0xF0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xAF JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0xB9 DUP6 DUP6 PUSH2 0x7E JUMP JUMPDEST SWAP3 POP PUSH2 0xC8 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x7E JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH2 0xE5 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x536 DUP1 PUSH2 0xFF PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x334FC289 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x64A6C866 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x69FD2631 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0xC7868ACE EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xE171FCAB EQ PUSH2 0x9F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x2F4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xD0 JUMP JUMPDEST PUSH2 0x8A PUSH2 0xDF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x372 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xEF JUMP JUMPDEST PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x22D JUMP JUMPDEST PUSH2 0xFE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x308 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xE0 SHL DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x24 DUP3 ADD MLOAD PUSH1 0x44 DUP4 ADD MLOAD PUSH1 0x64 DUP5 ADD MLOAD PUSH1 0x84 DUP6 ADD MLOAD PUSH1 0x1 SLOAD PUSH1 0x0 SWAP6 DUP7 SWAP6 PUSH1 0x60 SWAP6 SWAP2 SWAP5 SWAP1 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP1 DUP8 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH1 0xE0 SHL AND EQ PUSH2 0x169 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x387 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x19A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x424 JUMP JUMPDEST DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x3F5 JUMP JUMPDEST DUP11 DUP3 EQ PUSH2 0x1EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x3BE JUMP JUMPDEST DUP10 DUP2 LT ISZERO PUSH2 0x20A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x450 JUMP JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP13 PUSH1 0x0 SWAP13 POP SWAP7 SWAP11 POP SWAP6 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x245 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x250 DUP2 PUSH2 0x4E8 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x260 DUP2 PUSH2 0x4E8 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x270 DUP2 PUSH2 0x4E8 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x299 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 DUP9 ADD DUP10 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x2AA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP2 POP PUSH2 0x2BF PUSH2 0x2BA DUP4 PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x491 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP5 ADD ADD GT ISZERO PUSH2 0x2D3 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2E4 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP6 ADD PUSH2 0x4DC JUMP JUMPDEST DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE PUSH1 0x20 DUP5 DUP2 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x60 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x349 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP3 ADD PUSH2 0x32D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x35A JUMPI DUP4 PUSH1 0x80 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x80 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4E6F74204F6E6520496E636820537761702046756E6374696F6E000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x536F75726365207175616E74697479206D69736D617463680000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x24B73B30B634B2103932B1B2B4BB32903A37B5B2B7 PUSH1 0x59 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x24B73B30B634B21039B2B732103A37B5B2B7 PUSH1 0x71 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D696E2064657374696E6174696F6E207175616E74697479206D69736D617463 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0xFB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4CE JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 BALANCE CALLDATALOAD 0xBA 0xCA 0xDC CHAINID NUMBER 0xB4 DUP4 0xA7 CALLDATASIZE 0xED PUSH6 0x77E84F24682 DUP15 STATICCALL 0xD0 PUSH25 0x3DCD54E34A95C5F664736F6C634300060A0033000000000000 ",
              "sourceMap": "853:3646:0:-:0;;;1551:346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1722:22;:48;;-1:-1:-1;;;;;;1722:48:0;;;-1:-1:-1;;;;;1722:48:0;;;;;;;-1:-1:-1;1780:48:0;;;;;;;;;;;;;-1:-1:-1;;;;1838:52:0;-1:-1:-1;;;1838:52:0;;;;;;;;;;;;853:3646;;5:134:-1;83:13;;-1:-1;;;;;1136:54;;1261:35;;1251:2;;1310:1;;1300:12;1251:2;68:71;;;;;285:533;;;;433:2;421:9;412:7;408:23;404:32;401:2;;;-1:-1;;439:12;401:2;501:64;557:7;533:22;501:64;;;491:74;;620:64;676:7;602:2;656:9;652:22;620:64;;;721:2;770:22;;223:13;610:74;;-1:-1;;;;;;;984:78;;1384:34;;1374:2;;-1:-1;;1422:12;1374:2;729:73;;;;395:423;;;;;;;853:3646:0;;;;;;"
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c8063334fc2891461005c57806364a6c8661461007a57806369fd263114610082578063c7868ace14610097578063e171fcab1461009f575b600080fd5b6100646100c1565b60405161007191906102f4565b60405180910390f35b6100646100d0565b61008a6100df565b6040516100719190610372565b6100646100ef565b6100b26100ad36600461022d565b6100fe565b60405161007193929190610308565b6000546001600160a01b031690565b6000546001600160a01b031681565b600154600160a01b900460e01b81565b6001546001600160a01b031681565b6020810151602482015160448301516064840151608485015160015460009586956060959194909391929091906001600160e01b0319808716600160a01b90920460e01b16146101695760405162461bcd60e51b815260040161016090610387565b60405180910390fd5b8d6001600160a01b0316846001600160a01b03161461019a5760405162461bcd60e51b815260040161016090610424565b8c6001600160a01b0316836001600160a01b0316146101cb5760405162461bcd60e51b8152600401610160906103f5565b8a82146101ea5760405162461bcd60e51b8152600401610160906103be565b8981101561020a5760405162461bcd60e51b815260040161016090610450565b50506001546001600160a01b03169c60009c50969a509598505050505050505050565b60008060008060008060c08789031215610245578182fd5b8635610250816104e8565b95506020870135610260816104e8565b94506040870135610270816104e8565b9350606087013592506080870135915060a087013567ffffffffffffffff811115610299578182fd5b80880189601f8201126102aa578283fd5b803591506102bf6102ba836104b8565b610491565b8281528a60208484010111156102d3578384fd5b6102e48360208301602085016104dc565b8093505050509295509295509295565b6001600160a01b0391909116815260200190565b600060018060a01b038516825260208481840152606060408401528351806060850152825b818110156103495785810183015185820160800152820161032d565b8181111561035a5783608083870101525b50601f01601f19169290920160800195945050505050565b6001600160e01b031991909116815260200190565b6020808252601a908201527f4e6f74204f6e6520496e636820537761702046756e6374696f6e000000000000604082015260600190565b60208082526018908201527f536f75726365207175616e74697479206d69736d617463680000000000000000604082015260600190565b60208082526015908201527424b73b30b634b2103932b1b2b4bb32903a37b5b2b760591b604082015260600190565b60208082526012908201527124b73b30b634b21039b2b732103a37b5b2b760711b604082015260600190565b60208082526021908201527f4d696e2064657374696e6174696f6e207175616e74697479206d69736d6174636040820152600d60fb1b606082015260800190565b60405181810167ffffffffffffffff811182821017156104b057600080fd5b604052919050565b600067ffffffffffffffff8211156104ce578081fd5b50601f01601f191660200190565b82818337506000910152565b6001600160a01b03811681146104fd57600080fd5b5056fea2646970667358221220e03135bacadc4643b483a736ed65077e84f246828efad0783dcd54e34a95c5f664736f6c634300060a0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x334FC289 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x64A6C866 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x69FD2631 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0xC7868ACE EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xE171FCAB EQ PUSH2 0x9F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0xC1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x2F4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xD0 JUMP JUMPDEST PUSH2 0x8A PUSH2 0xDF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x372 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xEF JUMP JUMPDEST PUSH2 0xB2 PUSH2 0xAD CALLDATASIZE PUSH1 0x4 PUSH2 0x22D JUMP JUMPDEST PUSH2 0xFE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x71 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x308 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 DIV PUSH1 0xE0 SHL DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x24 DUP3 ADD MLOAD PUSH1 0x44 DUP4 ADD MLOAD PUSH1 0x64 DUP5 ADD MLOAD PUSH1 0x84 DUP6 ADD MLOAD PUSH1 0x1 SLOAD PUSH1 0x0 SWAP6 DUP7 SWAP6 PUSH1 0x60 SWAP6 SWAP2 SWAP5 SWAP1 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP1 DUP8 AND PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP3 DIV PUSH1 0xE0 SHL AND EQ PUSH2 0x169 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x387 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x19A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x424 JUMP JUMPDEST DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH2 0x1CB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x3F5 JUMP JUMPDEST DUP11 DUP3 EQ PUSH2 0x1EA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x3BE JUMP JUMPDEST DUP10 DUP2 LT ISZERO PUSH2 0x20A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x160 SWAP1 PUSH2 0x450 JUMP JUMPDEST POP POP PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP13 PUSH1 0x0 SWAP13 POP SWAP7 SWAP11 POP SWAP6 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x245 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x250 DUP2 PUSH2 0x4E8 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x260 DUP2 PUSH2 0x4E8 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x270 DUP2 PUSH2 0x4E8 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x299 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP1 DUP9 ADD DUP10 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x2AA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP2 POP PUSH2 0x2BF PUSH2 0x2BA DUP4 PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x491 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP11 PUSH1 0x20 DUP5 DUP5 ADD ADD GT ISZERO PUSH2 0x2D3 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x2E4 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP6 ADD PUSH2 0x4DC JUMP JUMPDEST DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 MSTORE PUSH1 0x20 DUP5 DUP2 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x60 DUP6 ADD MSTORE DUP3 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x349 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x80 ADD MSTORE DUP3 ADD PUSH2 0x32D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x35A JUMPI DUP4 PUSH1 0x80 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x80 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1A SWAP1 DUP3 ADD MSTORE PUSH32 0x4E6F74204F6E6520496E636820537761702046756E6374696F6E000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x536F75726365207175616E74697479206D69736D617463680000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x24B73B30B634B2103932B1B2B4BB32903A37B5B2B7 PUSH1 0x59 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x12 SWAP1 DUP3 ADD MSTORE PUSH18 0x24B73B30B634B21039B2B732103A37B5B2B7 PUSH1 0x71 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D696E2064657374696E6174696F6E207175616E74697479206D69736D617463 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0xFB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4CE JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x4FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 BALANCE CALLDATALOAD 0xBA 0xCA 0xDC CHAINID NUMBER 0xB4 DUP4 0xA7 CALLDATASIZE 0xED PUSH6 0x77E84F24682 DUP15 STATICCALL 0xD0 PUSH25 0x3DCD54E34A95C5F664736F6C634300060A0033000000000000 ",
              "sourceMap": "853:3646:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4369:128;;;:::i;:::-;;;;;;;;;;;;;;;;995:37;;;:::i;1171:38::-;;;:::i;:::-;;;;;;;;1080:37;;;:::i;2633:1528::-;;;;;;;;;:::i;:::-;;;;;;;;;;4369:128;4438:7;4468:22;-1:-1:-1;;;;;4468:22:0;4369:128;:::o;995:37::-;;;-1:-1:-1;;;;;995:37:0;;:::o;1171:38::-;;;-1:-1:-1;;;1171:38:0;;;;;:::o;1080:37::-;;;-1:-1:-1;;;;;1080:37:0;;:::o;2633:1528::-;3311:2;3300:14;;3294:21;3358:2;3347:14;;3341:21;3403:2;3392:14;;3386:21;3456:3;3445:15;;3439:22;3510:3;3499:15;;3493:22;3569:24;;2922:7;;;;2940:12;;3294:21;;3341;;3386;;3439:22;;3493;-1:-1:-1;;;;;;3556:37:0;;;-1:-1:-1;;;3569:24:0;;;;;3556:37;;3535:110;;;;-1:-1:-1;;;3535:110:0;;;;;;;;;;;;;;;;;3690:12;-1:-1:-1;;;;;3677:25:0;:9;-1:-1:-1;;;;;3677:25:0;;3656:90;;;;-1:-1:-1;;;3656:90:0;;;;;;;;;3789:17;-1:-1:-1;;;;;3778:28:0;:7;-1:-1:-1;;;;;3778:28:0;;3757:96;;;;-1:-1:-1;;;3757:96:0;;;;;;;;;3904:15;3885;:34;3864:105;;;;-1:-1:-1;;;3864:105:0;;;;;;;;;4020:23;4001:15;:42;;3980:122;;;;-1:-1:-1;;;3980:122:0;;;;;;;;;-1:-1:-1;;4121:22:0;;-1:-1:-1;;;;;4121:22:0;;;;-1:-1:-1;4148:5:0;;-1:-1:-1;2633:1528:0;;-1:-1:-1;;;;;;;;;2633:1528:0:o;728:973:-1:-;;;;;;;926:3;914:9;905:7;901:23;897:33;894:2;;;-1:-1;;933:12;894:2;85:6;72:20;97:33;124:5;97:33;;;985:63;-1:-1;1085:2;1124:22;;72:20;97:33;72:20;97:33;;;1093:63;-1:-1;1193:2;1232:22;;72:20;97:33;72:20;97:33;;;1201:63;-1:-1;1301:2;1340:22;;658:20;;-1:-1;1409:3;1449:22;;658:20;;-1:-1;1546:3;1531:19;;1518:33;1571:18;1560:30;;1557:2;;;-1:-1;;1593:12;1557:2;1668:6;1657:9;1653:22;244:3;237:4;229:6;225:17;221:27;211:2;;-1:-1;;252:12;211:2;299:6;286:20;272:34;;321:64;336:48;377:6;336:48;;;321:64;;;405:6;398:5;391:21;509:3;1085:2;500:6;433;491:16;;488:25;485:2;;;-1:-1;;516:12;485:2;536:41;570:6;1085:2;467:5;463:16;1085:2;433:6;429:17;536:41;;;1613:72;;;;;;888:813;;;;;;;;;4119:222;-1:-1;;;;;8596:54;;;;1779:37;;4246:2;4231:18;;4217:124;4348:528;;1571:18;;8607:42;;;8600:5;8596:54;1786:3;1779:37;4713:2;4100:5;4713:2;4702:9;4698:18;4070:37;4549:2;4750;4739:9;4735:18;4728:48;2087:5;7901:12;8057:6;4549:2;4538:9;4534:18;8045:19;-1:-1;8968:101;8982:6;8979:1;8976:13;8968:101;;;9049:11;;;;;9043:18;9030:11;;;8085:14;9030:11;9023:39;8997:10;;8968:101;;;9084:6;9081:1;9078:13;9075:2;;;-1:-1;8085:14;9140:6;4538:9;9131:16;;9124:27;9075:2;-1:-1;9256:7;9240:14;-1:-1;;9236:28;2244:39;;;;8085:14;2244:39;;4520:356;-1:-1;;;;;4520:356;4883:218;-1:-1;;;;;;8444:78;;;;1897:36;;5008:2;4993:18;;4979:122;5108:416;5308:2;5322:47;;;2520:2;5293:18;;;8045:19;2556:28;8085:14;;;2536:49;2604:12;;;5279:245;5531:416;5731:2;5745:47;;;2855:2;5716:18;;;8045:19;2891:26;8085:14;;;2871:47;2937:12;;;5702:245;5954:416;6154:2;6168:47;;;3188:2;6139:18;;;8045:19;-1:-1;;;8085:14;;;3204:44;3267:12;;;6125:245;6377:416;6577:2;6591:47;;;3518:2;6562:18;;;8045:19;-1:-1;;;8085:14;;;3534:41;3594:12;;;6548:245;6800:416;7000:2;7014:47;;;3845:2;6985:18;;;8045:19;3881:34;8085:14;;;3861:55;-1:-1;;;3936:12;;;3929:25;3973:12;;;6971:245;7223:256;7285:2;7279:9;7311:17;;;7386:18;7371:34;;7407:22;;;7368:62;7365:2;;;7443:1;;7433:12;7365:2;7285;7452:22;7263:216;;-1:-1;7263:216;7486:321;;7629:18;7621:6;7618:30;7615:2;;;-1:-1;;7651:12;7615:2;-1:-1;9256:7;7705:17;-1:-1;;7701:33;7792:4;7782:15;;7552:255;8742:145;8823:6;8818:3;8813;8800:30;-1:-1;8879:1;8861:16;;8854:27;8793:94;9277:117;-1:-1;;;;;8596:54;;9336:35;;9326:2;;9385:1;;9375:12;9326:2;9320:74;"
            },
            "methodIdentifiers": {
              "getSpender()": "334fc289",
              "getTradeCalldata(address,address,address,uint256,uint256,bytes)": "e171fcab",
              "oneInchApprovalAddress()": "64a6c866",
              "oneInchExchangeAddress()": "c7868ace",
              "oneInchFunctionSignature()": "69fd2631"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/protocol/integration/exchange/OneInchExchangeAdapter.sol": {
        "ast": {
          "absolutePath": "contracts/protocol/integration/exchange/OneInchExchangeAdapter.sol",
          "exportedSymbols": {
            "OneInchExchangeAdapter": [
              121
            ]
          },
          "id": 122,
          "license": "Apache License",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "0.6",
                ".10"
              ],
              "nodeType": "PragmaDirective",
              "src": "655:23:0"
            },
            {
              "id": 2,
              "literals": [
                "experimental",
                "ABIEncoderV2"
              ],
              "nodeType": "PragmaDirective",
              "src": "679:35:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 3,
                "nodeType": "StructuredDocumentation",
                "src": "716:135:0",
                "text": " @title OneInchExchangeAdapter\n @author Set Protocol\n Exchange adapter for 1Inch exchange that returns data for trades"
              },
              "fullyImplemented": true,
              "id": 121,
              "linearizedBaseContracts": [
                121
              ],
              "name": "OneInchExchangeAdapter",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "functionSelector": "64a6c866",
                  "id": 5,
                  "mutability": "mutable",
                  "name": "oneInchApprovalAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 121,
                  "src": "995:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "995:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "c7868ace",
                  "id": 7,
                  "mutability": "mutable",
                  "name": "oneInchExchangeAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 121,
                  "src": "1080:37:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1080:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "69fd2631",
                  "id": 9,
                  "mutability": "mutable",
                  "name": "oneInchFunctionSignature",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 121,
                  "src": "1171:38:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 8,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "1171:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 31,
                    "nodeType": "Block",
                    "src": "1712:185:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19,
                            "name": "oneInchApprovalAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5,
                            "src": "1722:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 20,
                            "name": "_oneInchApprovalAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12,
                            "src": "1747:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1722:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 22,
                        "nodeType": "ExpressionStatement",
                        "src": "1722:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 25,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 23,
                            "name": "oneInchExchangeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7,
                            "src": "1780:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 24,
                            "name": "_oneInchExchangeAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14,
                            "src": "1805:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1780:48:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 26,
                        "nodeType": "ExpressionStatement",
                        "src": "1780:48:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 27,
                            "name": "oneInchFunctionSignature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9,
                            "src": "1838:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 28,
                            "name": "_oneInchFunctionSignature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16,
                            "src": "1865:25:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "1838:52:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 30,
                        "nodeType": "ExpressionStatement",
                        "src": "1838:52:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 10,
                    "nodeType": "StructuredDocumentation",
                    "src": "1265:281:0",
                    "text": " Set state variables\n @param _oneInchApprovalAddress       Address of 1inch approval contract\n @param _oneInchExchangeAddress       Address of 1inch exchange contract\n @param _oneInchFunctionSignature     Bytes of 1inch function signature"
                  },
                  "id": 32,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 17,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12,
                        "mutability": "mutable",
                        "name": "_oneInchApprovalAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 32,
                        "src": "1572:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 11,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1572:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 14,
                        "mutability": "mutable",
                        "name": "_oneInchExchangeAddress",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 32,
                        "src": "1613:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 13,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1613:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 16,
                        "mutability": "mutable",
                        "name": "_oneInchFunctionSignature",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 32,
                        "src": "1654:32:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 15,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1654:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1562:130:0"
                  },
                  "returnParameters": {
                    "id": 18,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1712:0:0"
                  },
                  "scope": 121,
                  "src": "1551:346:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 110,
                    "nodeType": "Block",
                    "src": "2958:1203:0",
                    "statements": [
                      {
                        "assignments": [
                          55
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 55,
                            "mutability": "mutable",
                            "name": "signature",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 110,
                            "src": "2971:16:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "typeName": {
                              "id": 54,
                              "name": "bytes4",
                              "nodeType": "ElementaryTypeName",
                              "src": "2971:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 56,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2971:16:0"
                      },
                      {
                        "assignments": [
                          58
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 58,
                            "mutability": "mutable",
                            "name": "fromToken",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 110,
                            "src": "2997:17:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 57,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2997:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 59,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2997:17:0"
                      },
                      {
                        "assignments": [
                          61
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 61,
                            "mutability": "mutable",
                            "name": "toToken",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 110,
                            "src": "3024:15:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 60,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3024:7:0",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 62,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3024:15:0"
                      },
                      {
                        "assignments": [
                          64
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 64,
                            "mutability": "mutable",
                            "name": "fromTokenAmount",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 110,
                            "src": "3049:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 63,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3049:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 65,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3049:23:0"
                      },
                      {
                        "assignments": [
                          67
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 67,
                            "mutability": "mutable",
                            "name": "minReturnAmount",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 110,
                            "src": "3082:23:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 66,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3082:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 68,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3082:23:0"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "3267:258:0",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "3281:34:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_data",
                                        "nodeType": "YulIdentifier",
                                        "src": "3304:5:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3311:2:0",
                                        "type": "",
                                        "value": "32"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3300:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3300:14:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3294:5:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3294:21:0"
                              },
                              "variableNames": [
                                {
                                  "name": "signature",
                                  "nodeType": "YulIdentifier",
                                  "src": "3281:9:0"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3328:34:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_data",
                                        "nodeType": "YulIdentifier",
                                        "src": "3351:5:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3358:2:0",
                                        "type": "",
                                        "value": "36"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3347:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3347:14:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3341:5:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3341:21:0"
                              },
                              "variableNames": [
                                {
                                  "name": "fromToken",
                                  "nodeType": "YulIdentifier",
                                  "src": "3328:9:0"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3375:32:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_data",
                                        "nodeType": "YulIdentifier",
                                        "src": "3396:5:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3403:2:0",
                                        "type": "",
                                        "value": "68"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3392:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3392:14:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3386:5:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3386:21:0"
                              },
                              "variableNames": [
                                {
                                  "name": "toToken",
                                  "nodeType": "YulIdentifier",
                                  "src": "3375:7:0"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3420:41:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_data",
                                        "nodeType": "YulIdentifier",
                                        "src": "3449:5:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3456:3:0",
                                        "type": "",
                                        "value": "100"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3445:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3445:15:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3439:5:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3439:22:0"
                              },
                              "variableNames": [
                                {
                                  "name": "fromTokenAmount",
                                  "nodeType": "YulIdentifier",
                                  "src": "3420:15:0"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "3474:41:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_data",
                                        "nodeType": "YulIdentifier",
                                        "src": "3503:5:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "3510:3:0",
                                        "type": "",
                                        "value": "132"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "3499:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "3499:15:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "3493:5:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "3493:22:0"
                              },
                              "variableNames": [
                                {
                                  "name": "minReturnAmount",
                                  "nodeType": "YulIdentifier",
                                  "src": "3474:15:0"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 45,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3304:5:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 45,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3351:5:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 45,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3396:5:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 45,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3449:5:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 45,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3503:5:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 58,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3328:9:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 64,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3420:15:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 67,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3474:15:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 55,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3281:9:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 61,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3375:7:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 69,
                        "nodeType": "InlineAssembly",
                        "src": "3258:267:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 73,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 71,
                                "name": "signature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 55,
                                "src": "3556:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 72,
                                "name": "oneInchFunctionSignature",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9,
                                "src": "3569:24:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "3556:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4e6f74204f6e6520496e636820537761702046756e6374696f6e",
                              "id": 74,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3607:28:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_201ce871c1e0e9be84e9c4b9b67f6f0f1408bafca9b58a0d91f8a8f9f14fc016",
                                "typeString": "literal_string \"Not One Inch Swap Function\""
                              },
                              "value": "Not One Inch Swap Function"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_201ce871c1e0e9be84e9c4b9b67f6f0f1408bafca9b58a0d91f8a8f9f14fc016",
                                "typeString": "literal_string \"Not One Inch Swap Function\""
                              }
                            ],
                            "id": 70,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3535:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 75,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3535:110:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 76,
                        "nodeType": "ExpressionStatement",
                        "src": "3535:110:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 80,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 78,
                                "name": "fromToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 58,
                                "src": "3677:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 79,
                                "name": "_sourceToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 35,
                                "src": "3690:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "3677:25:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c69642073656e6420746f6b656e",
                              "id": 81,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3716:20:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6a6751986b3098073e92c95cbb406f2d0827d3a8f1b5ab06d7a3403b6662e3e0",
                                "typeString": "literal_string \"Invalid send token\""
                              },
                              "value": "Invalid send token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6a6751986b3098073e92c95cbb406f2d0827d3a8f1b5ab06d7a3403b6662e3e0",
                                "typeString": "literal_string \"Invalid send token\""
                              }
                            ],
                            "id": 77,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3656:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 82,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3656:90:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 83,
                        "nodeType": "ExpressionStatement",
                        "src": "3656:90:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 87,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 85,
                                "name": "toToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61,
                                "src": "3778:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 86,
                                "name": "_destinationToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 37,
                                "src": "3789:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "3778:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c6964207265636569766520746f6b656e",
                              "id": 88,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3820:23:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3fda73c12070320e41fa539466537e1439abbf1671c38dde6b85306ffd8ca293",
                                "typeString": "literal_string \"Invalid receive token\""
                              },
                              "value": "Invalid receive token"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3fda73c12070320e41fa539466537e1439abbf1671c38dde6b85306ffd8ca293",
                                "typeString": "literal_string \"Invalid receive token\""
                              }
                            ],
                            "id": 84,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3757:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 89,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3757:96:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 90,
                        "nodeType": "ExpressionStatement",
                        "src": "3757:96:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 94,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 92,
                                "name": "fromTokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 64,
                                "src": "3885:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 93,
                                "name": "_sourceQuantity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 41,
                                "src": "3904:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3885:34:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "536f75726365207175616e74697479206d69736d61746368",
                              "id": 95,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3933:26:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3d5b30128e77413e7cb9244ea3d1383c054344b131ae38f0658628636650d712",
                                "typeString": "literal_string \"Source quantity mismatch\""
                              },
                              "value": "Source quantity mismatch"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3d5b30128e77413e7cb9244ea3d1383c054344b131ae38f0658628636650d712",
                                "typeString": "literal_string \"Source quantity mismatch\""
                              }
                            ],
                            "id": 91,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3864:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 96,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3864:105:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 97,
                        "nodeType": "ExpressionStatement",
                        "src": "3864:105:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 99,
                                "name": "minReturnAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 67,
                                "src": "4001:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 100,
                                "name": "_minDestinationQuantity",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 43,
                                "src": "4020:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4001:42:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d696e2064657374696e6174696f6e207175616e74697479206d69736d61746368",
                              "id": 102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4057:35:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c2914d418e9ae74d06cdafee2274799ef63626b0dd082af2ad56050a16e9ec51",
                                "typeString": "literal_string \"Min destination quantity mismatch\""
                              },
                              "value": "Min destination quantity mismatch"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c2914d418e9ae74d06cdafee2274799ef63626b0dd082af2ad56050a16e9ec51",
                                "typeString": "literal_string \"Min destination quantity mismatch\""
                              }
                            ],
                            "id": 98,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3980:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3980:122:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 104,
                        "nodeType": "ExpressionStatement",
                        "src": "3980:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 105,
                              "name": "oneInchExchangeAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7,
                              "src": "4121:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 106,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4145:1:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "argumentTypes": null,
                              "id": 107,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 45,
                              "src": "4148:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "id": 108,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4120:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(address,int_const 0,bytes memory)"
                          }
                        },
                        "functionReturnParameters": 53,
                        "id": 109,
                        "nodeType": "Return",
                        "src": "4113:41:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 33,
                    "nodeType": "StructuredDocumentation",
                    "src": "1966:662:0",
                    "text": " Return 1inch calldata which is already generated from the 1inch API\n @param  _sourceToken              Address of source token to be sold\n @param  _destinationToken         Address of destination token to buy\n @param  _sourceQuantity           Amount of source token to sell\n @param  _minDestinationQuantity   Min amount of destination token to buy\n @param  _data                     Arbitrage bytes containing trade call data\n @return address                   Target contract address\n @return uint256                   Call value\n @return bytes                     Trade calldata"
                  },
                  "functionSelector": "e171fcab",
                  "id": 111,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getTradeCalldata",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 46,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 35,
                        "mutability": "mutable",
                        "name": "_sourceToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2668:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 34,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2668:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 37,
                        "mutability": "mutable",
                        "name": "_destinationToken",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2698:25:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 36,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2698:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 39,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2733:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 38,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2733:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 41,
                        "mutability": "mutable",
                        "name": "_sourceQuantity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2776:23:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 40,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2776:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 43,
                        "mutability": "mutable",
                        "name": "_minDestinationQuantity",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2809:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 42,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2809:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 45,
                        "mutability": "mutable",
                        "name": "_data",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2850:18:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 44,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2850:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2658:216:0"
                  },
                  "returnParameters": {
                    "id": 53,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 48,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2922:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 47,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2922:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 50,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2931:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 49,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2931:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 52,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 111,
                        "src": "2940:12:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 51,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2940:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2921:32:0"
                  },
                  "scope": 121,
                  "src": "2633:1528:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 119,
                    "nodeType": "Block",
                    "src": "4451:46:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 117,
                          "name": "oneInchApprovalAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5,
                          "src": "4468:22:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 116,
                        "id": 118,
                        "nodeType": "Return",
                        "src": "4461:29:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 112,
                    "nodeType": "StructuredDocumentation",
                    "src": "4167:197:0",
                    "text": " Returns the address to approve source tokens to for trading. This is the TokenTaker address\n @return address             Address of the contract to approve tokens to"
                  },
                  "functionSelector": "334fc289",
                  "id": 120,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getSpender",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 113,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4388:2:0"
                  },
                  "returnParameters": {
                    "id": 116,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 115,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 120,
                        "src": "4438:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 114,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4438:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4437:9:0"
                  },
                  "scope": 121,
                  "src": "4369:128:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 122,
              "src": "853:3646:0"
            }
          ],
          "src": "655:3844:0"
        },
        "id": 0
      }
    }
  }
}
