{
  "contractName": "ERC20Safe",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Manages deposited ERC20s.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This contract is intended to be used with ERC20Handler contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/ERC20Safe.sol\":\"ERC20Safe\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0x4fc155a2f7837603d69a13cfa481eb5e7f5e02cb77e2ec9edbac30986db37988\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0855147e38b5e36288a8df73b8da49132f14ec7abb19041b0c98872263643aaa\",\"dweb:/ipfs/QmSrSysyFUYQq7hbJaJXG7EyZW6ezDBzEJx3SABp6eiJSS\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://526dc85e1f9b9b45830e202568d267d93dde7a4fcccf4ad7798dadcd92304d3c\",\"dweb:/ipfs/QmaoXMB972J3cSDLtBq3xBo4jLwqD2uzXTwujtSPqkYVhR\"]},\"@openzeppelin/contracts/presets/ERC20PresetMinterPauser.sol\":{\"keccak256\":\"0xa7c607ed4a0b2bebb811a398838ce4b5165e490f420a06337478eb2ba8c90cfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7eaf468e140d3430711cb859fbb41b097093069a75bfe4ab19e515c59f8b78ea\",\"dweb:/ipfs/QmYvdoCh8TAX7ucpMZspPpHpQZSuNe8cQTrbZyUcy3caqc\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xca0c2396dbeb3503b51abf4248ebf77a1461edad513c01529df51850a012bee3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://991b44ff44e0496e8554a90f4c0512c28faed45104d40430019f3c67ea67740e\",\"dweb:/ipfs/Qmc3nRapVbcctELoZS5qe17zLkFB3bETBfwzCTMF1CSuGE\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0x9c0eb3b0e11d2480d49991dc384f1e5f9c9b9967cc81944d50916a9b9c6c4984\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99e4033d778624992e86f0b6d801a4f6d7b5c0cd5c79c1296be90a051ad5f5af\",\"dweb:/ipfs/QmShYmkUqh6pDEeoWadZ24icmCr4C2Xys1uE5boivPmbwf\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0xa22af140ae7ec1f8f2f3bed5869cd0d548dfaac66343f0efc7324ff34aaf1254\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fed479feda7354e89c095fde0927dcb581f460257bf93b7db54b2b902b4bbd48\",\"dweb:/ipfs/QmSDUhS2AQvTGXHwaxDgAXtwXKCgQh2kp1nwhwUgr2hQZK\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://256c8c8af5eb072bc473226ab2b2187149b8fc04f5f4a4820db22527f5ce8e3c\",\"dweb:/ipfs/QmRvi5BhnL7Rxf85KrJhwM6RRhukm4tzoctRdgQEheNyiN\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0x1562cd9922fbf739edfb979f506809e2743789cbde3177515542161c3d04b164\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4580d57781513d98870d9738c7d39094336e0a70cdb90d68dad549c6ced466ec\",\"dweb:/ipfs/Qmf9YZzzRFuvMnav9dgmeRUpdYMMECiZX8w25sHWVbA18V\"]},\"@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x212fb1b1d4beaf74354dad9bc329f44ee3c5375ef1c32acff76b4ecefc10f1d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d21c68cb321d1c8d0fa39fd9ecb6bbe3b2f26623b0f38af280a010c916c85f23\",\"dweb:/ipfs/Qmf2P51HRC4ekDHLYfbXu5SXR33gXrWtq6oKSmfyWqVRuC\"]},\"project:/contracts/ERC20Safe.sol\":{\"keccak256\":\"0x8f93dfbdf43c6ba17ef5742ff544a7f78b97ef66817fee1532f099a9fd57d194\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://58517fef09d9e89ce7dc685bf6d90b125155add35e3c9834b6859389047e7961\",\"dweb:/ipfs/Qma6q2ZMDaNKTa6D8Ppsoe71xWieABmPEeynU6nbkXTnKX\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220e291a2b1ef56f11598861c0d4b6b07a895288459c0ae0365fbe6c080ced7b19864736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600080fdfea2646970667358221220e291a2b1ef56f11598861c0d4b6b07a895288459c0ae0365fbe6c080ced7b19864736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "464:3159:38:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "464:3159:38:-:0;;;;;",
  "source": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.6.12;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/presets/ERC20PresetMinterPauser.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol\";\n\n/**\n    @title Manages deposited ERC20s.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with ERC20Handler contract.\n */\ncontract ERC20Safe {\n    using SafeMath for uint256;\n\n    /**\n        @notice Used to gain custody of deposited token.\n        @param tokenAddress Address of ERC20 to transfer.\n        @param owner Address of current token owner.\n        @param recipient Address to transfer tokens to.\n        @param amount Amount of tokens to transfer.\n     */\n    function lockERC20(address tokenAddress, address owner, address recipient, uint256 amount) internal {\n        IERC20 erc20 = IERC20(tokenAddress);\n        _safeTransferFrom(erc20, owner, recipient, amount);\n    }\n\n    /**\n        @notice Transfers custody of token to recipient.\n        @param tokenAddress Address of ERC20 to transfer.\n        @param recipient Address to transfer tokens to.\n        @param amount Amount of tokens to transfer.\n     */\n    function releaseERC20(address tokenAddress, address recipient, uint256 amount) internal {\n        IERC20 erc20 = IERC20(tokenAddress);\n        _safeTransfer(erc20, recipient, amount);\n    }\n\n    /**\n        @notice Used to create new ERC20s.\n        @param tokenAddress Address of ERC20 to transfer.\n        @param recipient Address to mint token to.\n        @param amount Amount of token to mint.\n     */\n    function mintERC20(address tokenAddress, address recipient, uint256 amount) internal {\n        ERC20PresetMinterPauser erc20 = ERC20PresetMinterPauser(tokenAddress);\n        erc20.mint(recipient, amount);\n\n    }\n\n    /**\n        @notice Used to burn ERC20s.\n        @param tokenAddress Address of ERC20 to burn.\n        @param owner Current owner of tokens.\n        @param amount Amount of tokens to burn.\n     */\n    function burnERC20(address tokenAddress, address owner, uint256 amount) internal {\n        ERC20Burnable erc20 = ERC20Burnable(tokenAddress);\n        erc20.burnFrom(owner, amount);\n    }\n\n    /**\n        @notice used to transfer ERC20s safely\n        @param token Token instance to transfer\n        @param to Address to transfer token to\n        @param value Amount of token to transfer\n     */\n    function _safeTransfer(IERC20 token, address to, uint256 value) private {\n        _safeCall(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n\n    /**\n        @notice used to transfer ERC20s safely\n        @param token Token instance to transfer\n        @param from Address to transfer token from\n        @param to Address to transfer token to\n        @param value Amount of token to transfer\n     */\n    function _safeTransferFrom(IERC20 token, address from, address to, uint256 value) private {\n        _safeCall(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n        @notice used to make calls to ERC20s safely\n        @param token Token instance call targets\n        @param data encoded call data\n     */\n    function _safeCall(IERC20 token, bytes memory data) private {        \n        (bool success, bytes memory returndata) = address(token).call(data);\n        require(success, \"ERC20: call failed\");\n\n        if (returndata.length > 0) {\n\n            require(abi.decode(returndata, (bool)), \"ERC20: operation did not succeed\");\n        }\n    }\n\n}\n",
  "sourcePath": "/home/sigo/w/deer/ethsub/packages/sol/contracts/ERC20Safe.sol",
  "ast": {
    "absolutePath": "project:/contracts/ERC20Safe.sol",
    "exportedSymbols": {
      "ERC20Safe": [
        7751
      ]
    },
    "id": 7752,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 7553,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "42:23:38"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 7554,
        "nodeType": "ImportDirective",
        "scope": 7752,
        "sourceUnit": 938,
        "src": "67:51:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 7555,
        "nodeType": "ImportDirective",
        "scope": 7752,
        "sourceUnit": 3320,
        "src": "119:56:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/presets/ERC20PresetMinterPauser.sol",
        "file": "@openzeppelin/contracts/presets/ERC20PresetMinterPauser.sol",
        "id": 7556,
        "nodeType": "ImportDirective",
        "scope": 7752,
        "sourceUnit": 1255,
        "src": "176:69:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol",
        "file": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol",
        "id": 7557,
        "nodeType": "ImportDirective",
        "scope": 7752,
        "sourceUnit": 3205,
        "src": "246:63:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 7558,
          "nodeType": "StructuredDocumentation",
          "src": "311:152:38",
          "text": "@title Manages deposited ERC20s.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with ERC20Handler contract."
        },
        "fullyImplemented": true,
        "id": 7751,
        "linearizedBaseContracts": [
          7751
        ],
        "name": "ERC20Safe",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 7561,
            "libraryName": {
              "contractScope": null,
              "id": 7559,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 937,
              "src": "495:8:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$937",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "489:27:38",
            "typeName": {
              "id": 7560,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "508:7:38",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 7586,
              "nodeType": "Block",
              "src": "914:112:38",
              "statements": [
                {
                  "assignments": [
                    7574
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7574,
                      "mutability": "mutable",
                      "name": "erc20",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7586,
                      "src": "924:12:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$3319",
                        "typeString": "contract IERC20"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7573,
                        "name": "IERC20",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3319,
                        "src": "924:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7578,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7576,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7564,
                        "src": "946:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7575,
                      "name": "IERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3319,
                      "src": "939:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3319_$",
                        "typeString": "type(contract IERC20)"
                      }
                    },
                    "id": 7577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "939:20:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3319",
                      "typeString": "contract IERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "924:35:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7580,
                        "name": "erc20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7574,
                        "src": "987:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7581,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7566,
                        "src": "994:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7582,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7568,
                        "src": "1001:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7583,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7570,
                        "src": "1012:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7579,
                      "name": "_safeTransferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7707,
                      "src": "969:17:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3319_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 7584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "969:50:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7585,
                  "nodeType": "ExpressionStatement",
                  "src": "969:50:38"
                }
              ]
            },
            "documentation": {
              "id": 7562,
              "nodeType": "StructuredDocumentation",
              "src": "522:287:38",
              "text": "@notice Used to gain custody of deposited token.\n@param tokenAddress Address of ERC20 to transfer.\n@param owner Address of current token owner.\n@param recipient Address to transfer tokens to.\n@param amount Amount of tokens to transfer."
            },
            "id": 7587,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "lockERC20",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7571,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7564,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7587,
                  "src": "833:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7563,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "833:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7566,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7587,
                  "src": "855:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7565,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "855:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7568,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7587,
                  "src": "870:17:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7567,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "870:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7570,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7587,
                  "src": "889:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7569,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "889:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "832:72:38"
            },
            "returnParameters": {
              "id": 7572,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "914:0:38"
            },
            "scope": 7751,
            "src": "814:212:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7609,
              "nodeType": "Block",
              "src": "1359:101:38",
              "statements": [
                {
                  "assignments": [
                    7598
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7598,
                      "mutability": "mutable",
                      "name": "erc20",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7609,
                      "src": "1369:12:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$3319",
                        "typeString": "contract IERC20"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7597,
                        "name": "IERC20",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3319,
                        "src": "1369:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7602,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7600,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7590,
                        "src": "1391:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7599,
                      "name": "IERC20",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3319,
                      "src": "1384:6:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3319_$",
                        "typeString": "type(contract IERC20)"
                      }
                    },
                    "id": 7601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1384:20:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3319",
                      "typeString": "contract IERC20"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1369:35:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7604,
                        "name": "erc20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7598,
                        "src": "1428:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7605,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7592,
                        "src": "1435:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7606,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7594,
                        "src": "1446:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 7603,
                      "name": "_safeTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7681,
                      "src": "1414:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3319_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 7607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1414:39:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7608,
                  "nodeType": "ExpressionStatement",
                  "src": "1414:39:38"
                }
              ]
            },
            "documentation": {
              "id": 7588,
              "nodeType": "StructuredDocumentation",
              "src": "1032:234:38",
              "text": "@notice Transfers custody of token to recipient.\n@param tokenAddress Address of ERC20 to transfer.\n@param recipient Address to transfer tokens to.\n@param amount Amount of tokens to transfer."
            },
            "id": 7610,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "releaseERC20",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7595,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7590,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7610,
                  "src": "1293:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7589,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1293:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7592,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7610,
                  "src": "1315:17:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7591,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1315:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7594,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7610,
                  "src": "1334:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1334:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1292:57:38"
            },
            "returnParameters": {
              "id": 7596,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1359:0:38"
            },
            "scope": 7751,
            "src": "1271:189:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7633,
              "nodeType": "Block",
              "src": "1766:126:38",
              "statements": [
                {
                  "assignments": [
                    7621
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7621,
                      "mutability": "mutable",
                      "name": "erc20",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7633,
                      "src": "1776:29:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20PresetMinterPauser_$1254",
                        "typeString": "contract ERC20PresetMinterPauser"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7620,
                        "name": "ERC20PresetMinterPauser",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1254,
                        "src": "1776:23:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20PresetMinterPauser_$1254",
                          "typeString": "contract ERC20PresetMinterPauser"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7625,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7623,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7613,
                        "src": "1832:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7622,
                      "name": "ERC20PresetMinterPauser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1254,
                      "src": "1808:23:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ERC20PresetMinterPauser_$1254_$",
                        "typeString": "type(contract ERC20PresetMinterPauser)"
                      }
                    },
                    "id": 7624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1808:37:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20PresetMinterPauser_$1254",
                      "typeString": "contract ERC20PresetMinterPauser"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1776:69:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7629,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7615,
                        "src": "1866:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7630,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7617,
                        "src": "1877:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7626,
                        "name": "erc20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7621,
                        "src": "1855:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20PresetMinterPauser_$1254",
                          "typeString": "contract ERC20PresetMinterPauser"
                        }
                      },
                      "id": 7628,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1198,
                      "src": "1855:10:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 7631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1855:29:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7632,
                  "nodeType": "ExpressionStatement",
                  "src": "1855:29:38"
                }
              ]
            },
            "documentation": {
              "id": 7611,
              "nodeType": "StructuredDocumentation",
              "src": "1466:210:38",
              "text": "@notice Used to create new ERC20s.\n@param tokenAddress Address of ERC20 to transfer.\n@param recipient Address to mint token to.\n@param amount Amount of token to mint."
            },
            "id": 7634,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mintERC20",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7613,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7634,
                  "src": "1700:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1700:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7615,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7634,
                  "src": "1722:17:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7614,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1722:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7617,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7634,
                  "src": "1741:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7616,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1741:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1699:57:38"
            },
            "returnParameters": {
              "id": 7619,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1766:0:38"
            },
            "scope": 7751,
            "src": "1681:211:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7657,
              "nodeType": "Block",
              "src": "2180:105:38",
              "statements": [
                {
                  "assignments": [
                    7645
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7645,
                      "mutability": "mutable",
                      "name": "erc20",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7657,
                      "src": "2190:19:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20Burnable_$3204",
                        "typeString": "contract ERC20Burnable"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 7644,
                        "name": "ERC20Burnable",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3204,
                        "src": "2190:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Burnable_$3204",
                          "typeString": "contract ERC20Burnable"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7649,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7647,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7637,
                        "src": "2226:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 7646,
                      "name": "ERC20Burnable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3204,
                      "src": "2212:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ERC20Burnable_$3204_$",
                        "typeString": "type(contract ERC20Burnable)"
                      }
                    },
                    "id": 7648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2212:27:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Burnable_$3204",
                      "typeString": "contract ERC20Burnable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2190:49:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7653,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7639,
                        "src": "2264:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 7654,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7641,
                        "src": "2271:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 7650,
                        "name": "erc20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7645,
                        "src": "2249:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Burnable_$3204",
                          "typeString": "contract ERC20Burnable"
                        }
                      },
                      "id": 7652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3203,
                      "src": "2249:14:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 7655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2249:29:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7656,
                  "nodeType": "ExpressionStatement",
                  "src": "2249:29:38"
                }
              ]
            },
            "documentation": {
              "id": 7635,
              "nodeType": "StructuredDocumentation",
              "src": "1898:196:38",
              "text": "@notice Used to burn ERC20s.\n@param tokenAddress Address of ERC20 to burn.\n@param owner Current owner of tokens.\n@param amount Amount of tokens to burn."
            },
            "id": 7658,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "burnERC20",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7637,
                  "mutability": "mutable",
                  "name": "tokenAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7658,
                  "src": "2118:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7636,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2118:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7639,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7658,
                  "src": "2140:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7638,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2140:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7641,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7658,
                  "src": "2155:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2155:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2117:53:38"
            },
            "returnParameters": {
              "id": 7643,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2180:0:38"
            },
            "scope": 7751,
            "src": "2099:186:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 7680,
              "nodeType": "Block",
              "src": "2570:93:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7669,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7661,
                        "src": "2590:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7672,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7661,
                                "src": "2620:5:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$3319",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 7673,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "transfer",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3268,
                              "src": "2620:14:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,uint256) external returns (bool)"
                              }
                            },
                            "id": 7674,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2620:23:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7675,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7663,
                            "src": "2645:2:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7676,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7665,
                            "src": "2649:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7670,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "2597:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 7671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSelector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2597:22:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes4) pure returns (bytes memory)"
                          }
                        },
                        "id": 7677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2597:58:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 7668,
                      "name": "_safeCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7750,
                      "src": "2580:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3319_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (contract IERC20,bytes memory)"
                      }
                    },
                    "id": 7678,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2580:76:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7679,
                  "nodeType": "ExpressionStatement",
                  "src": "2580:76:38"
                }
              ]
            },
            "documentation": {
              "id": 7659,
              "nodeType": "StructuredDocumentation",
              "src": "2291:202:38",
              "text": "@notice used to transfer ERC20s safely\n@param token Token instance to transfer\n@param to Address to transfer token to\n@param value Amount of token to transfer"
            },
            "id": 7681,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7661,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7681,
                  "src": "2521:12:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$3319",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7660,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3319,
                    "src": "2521:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3319",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7663,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7681,
                  "src": "2535:10:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7662,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2535:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7665,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7681,
                  "src": "2547:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7664,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2547:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2520:41:38"
            },
            "returnParameters": {
              "id": 7667,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2570:0:38"
            },
            "scope": 7751,
            "src": "2498:165:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 7706,
              "nodeType": "Block",
              "src": "3018:103:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7694,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7684,
                        "src": "3038:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 7697,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7684,
                                "src": "3068:5:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20_$3319",
                                  "typeString": "contract IERC20"
                                }
                              },
                              "id": 7698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "transferFrom",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3300,
                              "src": "3068:18:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (address,address,uint256) external returns (bool)"
                              }
                            },
                            "id": 7699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3068:27:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7700,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7686,
                            "src": "3097:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7701,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7688,
                            "src": "3103:2:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 7702,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7690,
                            "src": "3107:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 7695,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "3045:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 7696,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSelector",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3045:22:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes4) pure returns (bytes memory)"
                          }
                        },
                        "id": 7703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3045:68:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$3319",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 7693,
                      "name": "_safeCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7750,
                      "src": "3028:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3319_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (contract IERC20,bytes memory)"
                      }
                    },
                    "id": 7704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3028:86:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7705,
                  "nodeType": "ExpressionStatement",
                  "src": "3028:86:38"
                }
              ]
            },
            "documentation": {
              "id": 7682,
              "nodeType": "StructuredDocumentation",
              "src": "2670:253:38",
              "text": "@notice used to transfer ERC20s safely\n@param token Token instance to transfer\n@param from Address to transfer token from\n@param to Address to transfer token to\n@param value Amount of token to transfer"
            },
            "id": 7707,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7691,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7684,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7707,
                  "src": "2955:12:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$3319",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7683,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3319,
                    "src": "2955:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3319",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7686,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7707,
                  "src": "2969:12:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7685,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2969:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7688,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7707,
                  "src": "2983:10:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7687,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2983:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7690,
                  "mutability": "mutable",
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7707,
                  "src": "2995:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 7689,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2995:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2954:55:38"
            },
            "returnParameters": {
              "id": 7692,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3018:0:38"
            },
            "scope": 7751,
            "src": "2928:193:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 7749,
              "nodeType": "Block",
              "src": "3342:278:38",
              "statements": [
                {
                  "assignments": [
                    7716,
                    7718
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 7716,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7749,
                      "src": "3361:12:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 7715,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3361:4:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 7718,
                      "mutability": "mutable",
                      "name": "returndata",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 7749,
                      "src": "3375:23:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 7717,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3375:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 7726,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7724,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7712,
                        "src": "3422:4:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 7721,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7710,
                            "src": "3410:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_$3319",
                              "typeString": "contract IERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IERC20_$3319",
                              "typeString": "contract IERC20"
                            }
                          ],
                          "id": 7720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3402:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 7719,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3402:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 7722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3402:14:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 7723,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3402:19:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 7725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3402:25:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3360:67:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 7728,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7716,
                        "src": "3445:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "45524332303a2063616c6c206661696c6564",
                        "id": 7729,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3454:20:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3576d6dfb5a800b5f7598d3cc3220135845acd27db3901a5c3c655559195efba",
                          "typeString": "literal_string \"ERC20: call failed\""
                        },
                        "value": "ERC20: call failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3576d6dfb5a800b5f7598d3cc3220135845acd27db3901a5c3c655559195efba",
                          "typeString": "literal_string \"ERC20: call failed\""
                        }
                      ],
                      "id": 7727,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3437:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 7730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3437:38:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 7731,
                  "nodeType": "ExpressionStatement",
                  "src": "3437:38:38"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 7735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 7732,
                        "name": "returndata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7718,
                        "src": "3490:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 7733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3490:17:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 7734,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3510:1:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3490:21:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 7748,
                  "nodeType": "IfStatement",
                  "src": "3486:128:38",
                  "trueBody": {
                    "id": 7747,
                    "nodeType": "Block",
                    "src": "3513:101:38",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 7739,
                                  "name": "returndata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7718,
                                  "src": "3547:10:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "components": [
                                    {
                                      "argumentTypes": null,
                                      "id": 7741,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3560:4:38",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bool_$",
                                        "typeString": "type(bool)"
                                      },
                                      "typeName": {
                                        "id": 7740,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3560:4:38",
                                        "typeDescriptions": {
                                          "typeIdentifier": null,
                                          "typeString": null
                                        }
                                      }
                                    }
                                  ],
                                  "id": 7742,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "3559:6:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bool_$",
                                    "typeString": "type(bool)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  },
                                  {
                                    "typeIdentifier": "t_type$_t_bool_$",
                                    "typeString": "type(bool)"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 7737,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3536:3:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 7738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "decode",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "3536:10:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 7743,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3536:30:38",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "45524332303a206f7065726174696f6e20646964206e6f742073756363656564",
                              "id": 7744,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3568:34:38",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0e070c5d84d2ce64f06a55372ede71bea348c7746469ec289c4aba299bc05fdc",
                                "typeString": "literal_string \"ERC20: operation did not succeed\""
                              },
                              "value": "ERC20: operation did not succeed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0e070c5d84d2ce64f06a55372ede71bea348c7746469ec289c4aba299bc05fdc",
                                "typeString": "literal_string \"ERC20: operation did not succeed\""
                              }
                            ],
                            "id": 7736,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3528:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 7745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3528:75:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 7746,
                        "nodeType": "ExpressionStatement",
                        "src": "3528:75:38"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 7708,
              "nodeType": "StructuredDocumentation",
              "src": "3127:150:38",
              "text": "@notice used to make calls to ERC20s safely\n@param token Token instance call targets\n@param data encoded call data"
            },
            "id": 7750,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeCall",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 7713,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 7710,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7750,
                  "src": "3301:12:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$3319",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 7709,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3319,
                    "src": "3301:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$3319",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 7712,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 7750,
                  "src": "3315:17:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 7711,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3315:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3300:33:38"
            },
            "returnParameters": {
              "id": 7714,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3342:0:38"
            },
            "scope": 7751,
            "src": "3282:338:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          }
        ],
        "scope": 7752,
        "src": "464:3159:38"
      }
    ],
    "src": "42:3582:38"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/ERC20Safe.sol",
      "exportedSymbols": {
        "ERC20Safe": [
          7751
        ]
      },
      "license": "LGPL-3.0-only"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".12"
          ]
        },
        "id": 7553,
        "name": "PragmaDirective",
        "src": "42:23:38"
      },
      {
        "attributes": {
          "SourceUnit": 938,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "@openzeppelin/contracts/math/SafeMath.sol",
          "scope": 7752,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7554,
        "name": "ImportDirective",
        "src": "67:51:38"
      },
      {
        "attributes": {
          "SourceUnit": 3320,
          "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
          "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
          "scope": 7752,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7555,
        "name": "ImportDirective",
        "src": "119:56:38"
      },
      {
        "attributes": {
          "SourceUnit": 1255,
          "absolutePath": "@openzeppelin/contracts/presets/ERC20PresetMinterPauser.sol",
          "file": "@openzeppelin/contracts/presets/ERC20PresetMinterPauser.sol",
          "scope": 7752,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7556,
        "name": "ImportDirective",
        "src": "176:69:38"
      },
      {
        "attributes": {
          "SourceUnit": 3205,
          "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol",
          "file": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol",
          "scope": 7752,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 7557,
        "name": "ImportDirective",
        "src": "246:63:38"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            7751
          ],
          "name": "ERC20Safe",
          "scope": 7752
        },
        "children": [
          {
            "attributes": {
              "text": "@title Manages deposited ERC20s.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with ERC20Handler contract."
            },
            "id": 7558,
            "name": "StructuredDocumentation",
            "src": "311:152:38"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 937,
                  "type": "library SafeMath"
                },
                "id": 7559,
                "name": "UserDefinedTypeName",
                "src": "495:8:38"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 7560,
                "name": "ElementaryTypeName",
                "src": "508:7:38"
              }
            ],
            "id": 7561,
            "name": "UsingForDirective",
            "src": "489:27:38"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "lockERC20",
              "overrides": null,
              "scope": 7751,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Used to gain custody of deposited token.\n@param tokenAddress Address of ERC20 to transfer.\n@param owner Address of current token owner.\n@param recipient Address to transfer tokens to.\n@param amount Amount of tokens to transfer."
                },
                "id": 7562,
                "name": "StructuredDocumentation",
                "src": "522:287:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "overrides": null,
                      "scope": 7587,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7563,
                        "name": "ElementaryTypeName",
                        "src": "833:7:38"
                      }
                    ],
                    "id": 7564,
                    "name": "VariableDeclaration",
                    "src": "833:20:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "overrides": null,
                      "scope": 7587,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7565,
                        "name": "ElementaryTypeName",
                        "src": "855:7:38"
                      }
                    ],
                    "id": 7566,
                    "name": "VariableDeclaration",
                    "src": "855:13:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "recipient",
                      "overrides": null,
                      "scope": 7587,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7567,
                        "name": "ElementaryTypeName",
                        "src": "870:7:38"
                      }
                    ],
                    "id": 7568,
                    "name": "VariableDeclaration",
                    "src": "870:17:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "overrides": null,
                      "scope": 7587,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7569,
                        "name": "ElementaryTypeName",
                        "src": "889:7:38"
                      }
                    ],
                    "id": 7570,
                    "name": "VariableDeclaration",
                    "src": "889:14:38"
                  }
                ],
                "id": 7571,
                "name": "ParameterList",
                "src": "832:72:38"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7572,
                "name": "ParameterList",
                "src": "914:0:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7574
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "erc20",
                          "overrides": null,
                          "scope": 7586,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IERC20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IERC20",
                              "referencedDeclaration": 3319,
                              "type": "contract IERC20"
                            },
                            "id": 7573,
                            "name": "UserDefinedTypeName",
                            "src": "924:6:38"
                          }
                        ],
                        "id": 7574,
                        "name": "VariableDeclaration",
                        "src": "924:12:38"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IERC20",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3319,
                              "type": "type(contract IERC20)",
                              "value": "IERC20"
                            },
                            "id": 7575,
                            "name": "Identifier",
                            "src": "939:6:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7564,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 7576,
                            "name": "Identifier",
                            "src": "946:12:38"
                          }
                        ],
                        "id": 7577,
                        "name": "FunctionCall",
                        "src": "939:20:38"
                      }
                    ],
                    "id": 7578,
                    "name": "VariableDeclarationStatement",
                    "src": "924:35:38"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$3319",
                                  "typeString": "contract IERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7707,
                              "type": "function (contract IERC20,address,address,uint256)",
                              "value": "_safeTransferFrom"
                            },
                            "id": 7579,
                            "name": "Identifier",
                            "src": "969:17:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7574,
                              "type": "contract IERC20",
                              "value": "erc20"
                            },
                            "id": 7580,
                            "name": "Identifier",
                            "src": "987:5:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7566,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 7581,
                            "name": "Identifier",
                            "src": "994:5:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7568,
                              "type": "address",
                              "value": "recipient"
                            },
                            "id": 7582,
                            "name": "Identifier",
                            "src": "1001:9:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7570,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 7583,
                            "name": "Identifier",
                            "src": "1012:6:38"
                          }
                        ],
                        "id": 7584,
                        "name": "FunctionCall",
                        "src": "969:50:38"
                      }
                    ],
                    "id": 7585,
                    "name": "ExpressionStatement",
                    "src": "969:50:38"
                  }
                ],
                "id": 7586,
                "name": "Block",
                "src": "914:112:38"
              }
            ],
            "id": 7587,
            "name": "FunctionDefinition",
            "src": "814:212:38"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "releaseERC20",
              "overrides": null,
              "scope": 7751,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Transfers custody of token to recipient.\n@param tokenAddress Address of ERC20 to transfer.\n@param recipient Address to transfer tokens to.\n@param amount Amount of tokens to transfer."
                },
                "id": 7588,
                "name": "StructuredDocumentation",
                "src": "1032:234:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "overrides": null,
                      "scope": 7610,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7589,
                        "name": "ElementaryTypeName",
                        "src": "1293:7:38"
                      }
                    ],
                    "id": 7590,
                    "name": "VariableDeclaration",
                    "src": "1293:20:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "recipient",
                      "overrides": null,
                      "scope": 7610,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7591,
                        "name": "ElementaryTypeName",
                        "src": "1315:7:38"
                      }
                    ],
                    "id": 7592,
                    "name": "VariableDeclaration",
                    "src": "1315:17:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "overrides": null,
                      "scope": 7610,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7593,
                        "name": "ElementaryTypeName",
                        "src": "1334:7:38"
                      }
                    ],
                    "id": 7594,
                    "name": "VariableDeclaration",
                    "src": "1334:14:38"
                  }
                ],
                "id": 7595,
                "name": "ParameterList",
                "src": "1292:57:38"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7596,
                "name": "ParameterList",
                "src": "1359:0:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7598
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "erc20",
                          "overrides": null,
                          "scope": 7609,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IERC20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IERC20",
                              "referencedDeclaration": 3319,
                              "type": "contract IERC20"
                            },
                            "id": 7597,
                            "name": "UserDefinedTypeName",
                            "src": "1369:6:38"
                          }
                        ],
                        "id": 7598,
                        "name": "VariableDeclaration",
                        "src": "1369:12:38"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IERC20",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3319,
                              "type": "type(contract IERC20)",
                              "value": "IERC20"
                            },
                            "id": 7599,
                            "name": "Identifier",
                            "src": "1384:6:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7590,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 7600,
                            "name": "Identifier",
                            "src": "1391:12:38"
                          }
                        ],
                        "id": 7601,
                        "name": "FunctionCall",
                        "src": "1384:20:38"
                      }
                    ],
                    "id": 7602,
                    "name": "VariableDeclarationStatement",
                    "src": "1369:35:38"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$3319",
                                  "typeString": "contract IERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7681,
                              "type": "function (contract IERC20,address,uint256)",
                              "value": "_safeTransfer"
                            },
                            "id": 7603,
                            "name": "Identifier",
                            "src": "1414:13:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7598,
                              "type": "contract IERC20",
                              "value": "erc20"
                            },
                            "id": 7604,
                            "name": "Identifier",
                            "src": "1428:5:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7592,
                              "type": "address",
                              "value": "recipient"
                            },
                            "id": 7605,
                            "name": "Identifier",
                            "src": "1435:9:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7594,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 7606,
                            "name": "Identifier",
                            "src": "1446:6:38"
                          }
                        ],
                        "id": 7607,
                        "name": "FunctionCall",
                        "src": "1414:39:38"
                      }
                    ],
                    "id": 7608,
                    "name": "ExpressionStatement",
                    "src": "1414:39:38"
                  }
                ],
                "id": 7609,
                "name": "Block",
                "src": "1359:101:38"
              }
            ],
            "id": 7610,
            "name": "FunctionDefinition",
            "src": "1271:189:38"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "mintERC20",
              "overrides": null,
              "scope": 7751,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Used to create new ERC20s.\n@param tokenAddress Address of ERC20 to transfer.\n@param recipient Address to mint token to.\n@param amount Amount of token to mint."
                },
                "id": 7611,
                "name": "StructuredDocumentation",
                "src": "1466:210:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "overrides": null,
                      "scope": 7634,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7612,
                        "name": "ElementaryTypeName",
                        "src": "1700:7:38"
                      }
                    ],
                    "id": 7613,
                    "name": "VariableDeclaration",
                    "src": "1700:20:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "recipient",
                      "overrides": null,
                      "scope": 7634,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7614,
                        "name": "ElementaryTypeName",
                        "src": "1722:7:38"
                      }
                    ],
                    "id": 7615,
                    "name": "VariableDeclaration",
                    "src": "1722:17:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "overrides": null,
                      "scope": 7634,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7616,
                        "name": "ElementaryTypeName",
                        "src": "1741:7:38"
                      }
                    ],
                    "id": 7617,
                    "name": "VariableDeclaration",
                    "src": "1741:14:38"
                  }
                ],
                "id": 7618,
                "name": "ParameterList",
                "src": "1699:57:38"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7619,
                "name": "ParameterList",
                "src": "1766:0:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7621
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "erc20",
                          "overrides": null,
                          "scope": 7633,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ERC20PresetMinterPauser",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ERC20PresetMinterPauser",
                              "referencedDeclaration": 1254,
                              "type": "contract ERC20PresetMinterPauser"
                            },
                            "id": 7620,
                            "name": "UserDefinedTypeName",
                            "src": "1776:23:38"
                          }
                        ],
                        "id": 7621,
                        "name": "VariableDeclaration",
                        "src": "1776:29:38"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract ERC20PresetMinterPauser",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1254,
                              "type": "type(contract ERC20PresetMinterPauser)",
                              "value": "ERC20PresetMinterPauser"
                            },
                            "id": 7622,
                            "name": "Identifier",
                            "src": "1808:23:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7613,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 7623,
                            "name": "Identifier",
                            "src": "1832:12:38"
                          }
                        ],
                        "id": 7624,
                        "name": "FunctionCall",
                        "src": "1808:37:38"
                      }
                    ],
                    "id": 7625,
                    "name": "VariableDeclarationStatement",
                    "src": "1776:69:38"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mint",
                              "referencedDeclaration": 1198,
                              "type": "function (address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7621,
                                  "type": "contract ERC20PresetMinterPauser",
                                  "value": "erc20"
                                },
                                "id": 7626,
                                "name": "Identifier",
                                "src": "1855:5:38"
                              }
                            ],
                            "id": 7628,
                            "name": "MemberAccess",
                            "src": "1855:10:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7615,
                              "type": "address",
                              "value": "recipient"
                            },
                            "id": 7629,
                            "name": "Identifier",
                            "src": "1866:9:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7617,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 7630,
                            "name": "Identifier",
                            "src": "1877:6:38"
                          }
                        ],
                        "id": 7631,
                        "name": "FunctionCall",
                        "src": "1855:29:38"
                      }
                    ],
                    "id": 7632,
                    "name": "ExpressionStatement",
                    "src": "1855:29:38"
                  }
                ],
                "id": 7633,
                "name": "Block",
                "src": "1766:126:38"
              }
            ],
            "id": 7634,
            "name": "FunctionDefinition",
            "src": "1681:211:38"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "burnERC20",
              "overrides": null,
              "scope": 7751,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Used to burn ERC20s.\n@param tokenAddress Address of ERC20 to burn.\n@param owner Current owner of tokens.\n@param amount Amount of tokens to burn."
                },
                "id": 7635,
                "name": "StructuredDocumentation",
                "src": "1898:196:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "overrides": null,
                      "scope": 7658,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7636,
                        "name": "ElementaryTypeName",
                        "src": "2118:7:38"
                      }
                    ],
                    "id": 7637,
                    "name": "VariableDeclaration",
                    "src": "2118:20:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "overrides": null,
                      "scope": 7658,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7638,
                        "name": "ElementaryTypeName",
                        "src": "2140:7:38"
                      }
                    ],
                    "id": 7639,
                    "name": "VariableDeclaration",
                    "src": "2140:13:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "overrides": null,
                      "scope": 7658,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7640,
                        "name": "ElementaryTypeName",
                        "src": "2155:7:38"
                      }
                    ],
                    "id": 7641,
                    "name": "VariableDeclaration",
                    "src": "2155:14:38"
                  }
                ],
                "id": 7642,
                "name": "ParameterList",
                "src": "2117:53:38"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7643,
                "name": "ParameterList",
                "src": "2180:0:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7645
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "erc20",
                          "overrides": null,
                          "scope": 7657,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ERC20Burnable",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ERC20Burnable",
                              "referencedDeclaration": 3204,
                              "type": "contract ERC20Burnable"
                            },
                            "id": 7644,
                            "name": "UserDefinedTypeName",
                            "src": "2190:13:38"
                          }
                        ],
                        "id": 7645,
                        "name": "VariableDeclaration",
                        "src": "2190:19:38"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract ERC20Burnable",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3204,
                              "type": "type(contract ERC20Burnable)",
                              "value": "ERC20Burnable"
                            },
                            "id": 7646,
                            "name": "Identifier",
                            "src": "2212:13:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7637,
                              "type": "address",
                              "value": "tokenAddress"
                            },
                            "id": 7647,
                            "name": "Identifier",
                            "src": "2226:12:38"
                          }
                        ],
                        "id": 7648,
                        "name": "FunctionCall",
                        "src": "2212:27:38"
                      }
                    ],
                    "id": 7649,
                    "name": "VariableDeclarationStatement",
                    "src": "2190:49:38"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "burnFrom",
                              "referencedDeclaration": 3203,
                              "type": "function (address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7645,
                                  "type": "contract ERC20Burnable",
                                  "value": "erc20"
                                },
                                "id": 7650,
                                "name": "Identifier",
                                "src": "2249:5:38"
                              }
                            ],
                            "id": 7652,
                            "name": "MemberAccess",
                            "src": "2249:14:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7639,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 7653,
                            "name": "Identifier",
                            "src": "2264:5:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7641,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 7654,
                            "name": "Identifier",
                            "src": "2271:6:38"
                          }
                        ],
                        "id": 7655,
                        "name": "FunctionCall",
                        "src": "2249:29:38"
                      }
                    ],
                    "id": 7656,
                    "name": "ExpressionStatement",
                    "src": "2249:29:38"
                  }
                ],
                "id": 7657,
                "name": "Block",
                "src": "2180:105:38"
              }
            ],
            "id": 7658,
            "name": "FunctionDefinition",
            "src": "2099:186:38"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_safeTransfer",
              "overrides": null,
              "scope": 7751,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice used to transfer ERC20s safely\n@param token Token instance to transfer\n@param to Address to transfer token to\n@param value Amount of token to transfer"
                },
                "id": 7659,
                "name": "StructuredDocumentation",
                "src": "2291:202:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "token",
                      "overrides": null,
                      "scope": 7681,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IERC20",
                          "referencedDeclaration": 3319,
                          "type": "contract IERC20"
                        },
                        "id": 7660,
                        "name": "UserDefinedTypeName",
                        "src": "2521:6:38"
                      }
                    ],
                    "id": 7661,
                    "name": "VariableDeclaration",
                    "src": "2521:12:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 7681,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7662,
                        "name": "ElementaryTypeName",
                        "src": "2535:7:38"
                      }
                    ],
                    "id": 7663,
                    "name": "VariableDeclaration",
                    "src": "2535:10:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "value",
                      "overrides": null,
                      "scope": 7681,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7664,
                        "name": "ElementaryTypeName",
                        "src": "2547:7:38"
                      }
                    ],
                    "id": 7665,
                    "name": "VariableDeclaration",
                    "src": "2547:13:38"
                  }
                ],
                "id": 7666,
                "name": "ParameterList",
                "src": "2520:41:38"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7667,
                "name": "ParameterList",
                "src": "2570:0:38"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$3319",
                                  "typeString": "contract IERC20"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7750,
                              "type": "function (contract IERC20,bytes memory)",
                              "value": "_safeCall"
                            },
                            "id": 7668,
                            "name": "Identifier",
                            "src": "2580:9:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7661,
                              "type": "contract IERC20",
                              "value": "token"
                            },
                            "id": 7669,
                            "name": "Identifier",
                            "src": "2590:5:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodeWithSelector",
                                  "referencedDeclaration": null,
                                  "type": "function (bytes4) pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 7670,
                                    "name": "Identifier",
                                    "src": "2597:3:38"
                                  }
                                ],
                                "id": 7671,
                                "name": "MemberAccess",
                                "src": "2597:22:38"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "selector",
                                  "referencedDeclaration": null,
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transfer",
                                      "referencedDeclaration": 3268,
                                      "type": "function (address,uint256) external returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 7661,
                                          "type": "contract IERC20",
                                          "value": "token"
                                        },
                                        "id": 7672,
                                        "name": "Identifier",
                                        "src": "2620:5:38"
                                      }
                                    ],
                                    "id": 7673,
                                    "name": "MemberAccess",
                                    "src": "2620:14:38"
                                  }
                                ],
                                "id": 7674,
                                "name": "MemberAccess",
                                "src": "2620:23:38"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7663,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 7675,
                                "name": "Identifier",
                                "src": "2645:2:38"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7665,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 7676,
                                "name": "Identifier",
                                "src": "2649:5:38"
                              }
                            ],
                            "id": 7677,
                            "name": "FunctionCall",
                            "src": "2597:58:38"
                          }
                        ],
                        "id": 7678,
                        "name": "FunctionCall",
                        "src": "2580:76:38"
                      }
                    ],
                    "id": 7679,
                    "name": "ExpressionStatement",
                    "src": "2580:76:38"
                  }
                ],
                "id": 7680,
                "name": "Block",
                "src": "2570:93:38"
              }
            ],
            "id": 7681,
            "name": "FunctionDefinition",
            "src": "2498:165:38"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_safeTransferFrom",
              "overrides": null,
              "scope": 7751,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice used to transfer ERC20s safely\n@param token Token instance to transfer\n@param from Address to transfer token from\n@param to Address to transfer token to\n@param value Amount of token to transfer"
                },
                "id": 7682,
                "name": "StructuredDocumentation",
                "src": "2670:253:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "token",
                      "overrides": null,
                      "scope": 7707,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IERC20",
                          "referencedDeclaration": 3319,
                          "type": "contract IERC20"
                        },
                        "id": 7683,
                        "name": "UserDefinedTypeName",
                        "src": "2955:6:38"
                      }
                    ],
                    "id": 7684,
                    "name": "VariableDeclaration",
                    "src": "2955:12:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "overrides": null,
                      "scope": 7707,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7685,
                        "name": "ElementaryTypeName",
                        "src": "2969:7:38"
                      }
                    ],
                    "id": 7686,
                    "name": "VariableDeclaration",
                    "src": "2969:12:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "overrides": null,
                      "scope": 7707,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 7687,
                        "name": "ElementaryTypeName",
                        "src": "2983:7:38"
                      }
                    ],
                    "id": 7688,
                    "name": "VariableDeclaration",
                    "src": "2983:10:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "value",
                      "overrides": null,
                      "scope": 7707,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 7689,
                        "name": "ElementaryTypeName",
                        "src": "2995:7:38"
                      }
                    ],
                    "id": 7690,
                    "name": "VariableDeclaration",
                    "src": "2995:13:38"
                  }
                ],
                "id": 7691,
                "name": "ParameterList",
                "src": "2954:55:38"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7692,
                "name": "ParameterList",
                "src": "3018:0:38"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20_$3319",
                                  "typeString": "contract IERC20"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7750,
                              "type": "function (contract IERC20,bytes memory)",
                              "value": "_safeCall"
                            },
                            "id": 7693,
                            "name": "Identifier",
                            "src": "3028:9:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7684,
                              "type": "contract IERC20",
                              "value": "token"
                            },
                            "id": 7694,
                            "name": "Identifier",
                            "src": "3038:5:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodeWithSelector",
                                  "referencedDeclaration": null,
                                  "type": "function (bytes4) pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 7695,
                                    "name": "Identifier",
                                    "src": "3045:3:38"
                                  }
                                ],
                                "id": 7696,
                                "name": "MemberAccess",
                                "src": "3045:22:38"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "selector",
                                  "referencedDeclaration": null,
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transferFrom",
                                      "referencedDeclaration": 3300,
                                      "type": "function (address,address,uint256) external returns (bool)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 7684,
                                          "type": "contract IERC20",
                                          "value": "token"
                                        },
                                        "id": 7697,
                                        "name": "Identifier",
                                        "src": "3068:5:38"
                                      }
                                    ],
                                    "id": 7698,
                                    "name": "MemberAccess",
                                    "src": "3068:18:38"
                                  }
                                ],
                                "id": 7699,
                                "name": "MemberAccess",
                                "src": "3068:27:38"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7686,
                                  "type": "address",
                                  "value": "from"
                                },
                                "id": 7700,
                                "name": "Identifier",
                                "src": "3097:4:38"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7688,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 7701,
                                "name": "Identifier",
                                "src": "3103:2:38"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7690,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 7702,
                                "name": "Identifier",
                                "src": "3107:5:38"
                              }
                            ],
                            "id": 7703,
                            "name": "FunctionCall",
                            "src": "3045:68:38"
                          }
                        ],
                        "id": 7704,
                        "name": "FunctionCall",
                        "src": "3028:86:38"
                      }
                    ],
                    "id": 7705,
                    "name": "ExpressionStatement",
                    "src": "3028:86:38"
                  }
                ],
                "id": 7706,
                "name": "Block",
                "src": "3018:103:38"
              }
            ],
            "id": 7707,
            "name": "FunctionDefinition",
            "src": "2928:193:38"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_safeCall",
              "overrides": null,
              "scope": 7751,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice used to make calls to ERC20s safely\n@param token Token instance call targets\n@param data encoded call data"
                },
                "id": 7708,
                "name": "StructuredDocumentation",
                "src": "3127:150:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "token",
                      "overrides": null,
                      "scope": 7750,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract IERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "IERC20",
                          "referencedDeclaration": 3319,
                          "type": "contract IERC20"
                        },
                        "id": 7709,
                        "name": "UserDefinedTypeName",
                        "src": "3301:6:38"
                      }
                    ],
                    "id": 7710,
                    "name": "VariableDeclaration",
                    "src": "3301:12:38"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 7750,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 7711,
                        "name": "ElementaryTypeName",
                        "src": "3315:5:38"
                      }
                    ],
                    "id": 7712,
                    "name": "VariableDeclaration",
                    "src": "3315:17:38"
                  }
                ],
                "id": 7713,
                "name": "ParameterList",
                "src": "3300:33:38"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 7714,
                "name": "ParameterList",
                "src": "3342:0:38"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        7716,
                        7718
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "success",
                          "overrides": null,
                          "scope": 7749,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 7715,
                            "name": "ElementaryTypeName",
                            "src": "3361:4:38"
                          }
                        ],
                        "id": 7716,
                        "name": "VariableDeclaration",
                        "src": "3361:12:38"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "returndata",
                          "overrides": null,
                          "scope": 7749,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 7717,
                            "name": "ElementaryTypeName",
                            "src": "3375:5:38"
                          }
                        ],
                        "id": 7718,
                        "name": "VariableDeclaration",
                        "src": "3375:23:38"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(bool,bytes memory)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "call",
                              "referencedDeclaration": null,
                              "type": "function (bytes memory) payable returns (bool,bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IERC20_$3319",
                                          "typeString": "contract IERC20"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address",
                                          "type": null
                                        },
                                        "id": 7719,
                                        "name": "ElementaryTypeName",
                                        "src": "3402:7:38"
                                      }
                                    ],
                                    "id": 7720,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3402:7:38"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 7710,
                                      "type": "contract IERC20",
                                      "value": "token"
                                    },
                                    "id": 7721,
                                    "name": "Identifier",
                                    "src": "3410:5:38"
                                  }
                                ],
                                "id": 7722,
                                "name": "FunctionCall",
                                "src": "3402:14:38"
                              }
                            ],
                            "id": 7723,
                            "name": "MemberAccess",
                            "src": "3402:19:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7712,
                              "type": "bytes memory",
                              "value": "data"
                            },
                            "id": 7724,
                            "name": "Identifier",
                            "src": "3422:4:38"
                          }
                        ],
                        "id": 7725,
                        "name": "FunctionCall",
                        "src": "3402:25:38"
                      }
                    ],
                    "id": 7726,
                    "name": "VariableDeclarationStatement",
                    "src": "3360:67:38"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_3576d6dfb5a800b5f7598d3cc3220135845acd27db3901a5c3c655559195efba",
                                  "typeString": "literal_string \"ERC20: call failed\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 7727,
                            "name": "Identifier",
                            "src": "3437:7:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7716,
                              "type": "bool",
                              "value": "success"
                            },
                            "id": 7728,
                            "name": "Identifier",
                            "src": "3445:7:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "45524332303a2063616c6c206661696c6564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"ERC20: call failed\"",
                              "value": "ERC20: call failed"
                            },
                            "id": 7729,
                            "name": "Literal",
                            "src": "3454:20:38"
                          }
                        ],
                        "id": 7730,
                        "name": "FunctionCall",
                        "src": "3437:38:38"
                      }
                    ],
                    "id": 7731,
                    "name": "ExpressionStatement",
                    "src": "3437:38:38"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 7718,
                                  "type": "bytes memory",
                                  "value": "returndata"
                                },
                                "id": 7732,
                                "name": "Identifier",
                                "src": "3490:10:38"
                              }
                            ],
                            "id": 7733,
                            "name": "MemberAccess",
                            "src": "3490:17:38"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 7734,
                            "name": "Literal",
                            "src": "3510:1:38"
                          }
                        ],
                        "id": 7735,
                        "name": "BinaryOperation",
                        "src": "3490:21:38"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_0e070c5d84d2ce64f06a55372ede71bea348c7746469ec289c4aba299bc05fdc",
                                          "typeString": "literal_string \"ERC20: operation did not succeed\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 7736,
                                    "name": "Identifier",
                                    "src": "3528:7:38"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            },
                                            {
                                              "typeIdentifier": "t_type$_t_bool_$",
                                              "typeString": "type(bool)"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "member_name": "decode",
                                          "referencedDeclaration": null,
                                          "type": "function () pure"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": -1,
                                              "type": "abi",
                                              "value": "abi"
                                            },
                                            "id": 7737,
                                            "name": "Identifier",
                                            "src": "3536:3:38"
                                          }
                                        ],
                                        "id": 7738,
                                        "name": "MemberAccess",
                                        "src": "3536:10:38"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 7718,
                                          "type": "bytes memory",
                                          "value": "returndata"
                                        },
                                        "id": 7739,
                                        "name": "Identifier",
                                        "src": "3547:10:38"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(bool)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "bool",
                                                  "type": null
                                                },
                                                "id": 7740,
                                                "name": "ElementaryTypeName",
                                                "src": "3560:4:38"
                                              }
                                            ],
                                            "id": 7741,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "3560:4:38"
                                          }
                                        ],
                                        "id": 7742,
                                        "name": "TupleExpression",
                                        "src": "3559:6:38"
                                      }
                                    ],
                                    "id": 7743,
                                    "name": "FunctionCall",
                                    "src": "3536:30:38"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "45524332303a206f7065726174696f6e20646964206e6f742073756363656564",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"ERC20: operation did not succeed\"",
                                      "value": "ERC20: operation did not succeed"
                                    },
                                    "id": 7744,
                                    "name": "Literal",
                                    "src": "3568:34:38"
                                  }
                                ],
                                "id": 7745,
                                "name": "FunctionCall",
                                "src": "3528:75:38"
                              }
                            ],
                            "id": 7746,
                            "name": "ExpressionStatement",
                            "src": "3528:75:38"
                          }
                        ],
                        "id": 7747,
                        "name": "Block",
                        "src": "3513:101:38"
                      }
                    ],
                    "id": 7748,
                    "name": "IfStatement",
                    "src": "3486:128:38"
                  }
                ],
                "id": 7749,
                "name": "Block",
                "src": "3342:278:38"
              }
            ],
            "id": 7750,
            "name": "FunctionDefinition",
            "src": "3282:338:38"
          }
        ],
        "id": 7751,
        "name": "ContractDefinition",
        "src": "464:3159:38"
      }
    ],
    "id": 7752,
    "name": "SourceUnit",
    "src": "42:3582:38"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.3",
  "updatedAt": "2021-11-29T02:07:34.242Z",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {},
    "title": "Manages deposited ERC20s.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "This contract is intended to be used with ERC20Handler contract.",
    "version": 1
  }
}