{
  "contractName": "HandlerHelpers",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "bridgeAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "_bridgeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_burnList",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_contractWhitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_resourceIDToTokenContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_tokenContractAddressToResourceID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setResource",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setBurnable",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"_bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_burnList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToTokenContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_tokenContractAddressToResourceID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setBurnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\"}},\"setBurnable(address)\":{\"params\":{\"contractAddress\":\"Address of contract to be used when making or executing deposits.\"}},\"setResource(bytes32,address)\":{\"params\":{\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"withdraw(bytes)\":{\"params\":{\"data\":\"ABI-encoded withdrawal params relevant to the handler.\"}}},\"title\":\"Function used across handler contracts.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setBurnable(address)\":{\"notice\":\"First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}] to true.\"},\"setResource(bytes32,address)\":{\"notice\":\"First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, and {_contractWhitelist} to true for {contractAddress}.\"},\"withdraw(bytes)\":{\"notice\":\"Withdraw funds from ERC safes.\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/HandlerHelpers.sol\":\"HandlerHelpers\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/handlers/HandlerHelpers.sol\":{\"keccak256\":\"0x9418d0646c373e028595a4a3abf5ac93948ea64efa031f1531c70a0500882d09\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://43e30989056cc8c5f0d2a26cb3a7e8a5d0d51dd2c832fb8d751c353226254871\",\"dweb:/ipfs/QmRpXPeLz7Qjh5qxMW4PyC8qkjrpEJCeCiqfobZyg28y6S\"]},\"project:/contracts/interfaces/IERCHandler.sol\":{\"keccak256\":\"0x4384276611a789db6481e1158d92c280fe5990ec0c375df30dd5e8f8a97cbb4c\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3af488536c6d8f6b3090ca9b5fa54718941604a30f58bd66db641a6599a9f296\",\"dweb:/ipfs/QmSm988tQV4XtkCQpTbf2SbdCHp8AcjYZhQLhftPFXrUf2\"]}},\"version\":1}",
  "bytecode": "0x60a060405234801561001057600080fd5b506040516105123803806105128339818101604052602081101561003357600080fd5b5051606081901b6001600160601b0319166080526001600160a01b03166104a661006c60003980610291528061031052506104a66000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80636a70d0811161005b5780636a70d0811461019c5780637f79bea8146101d6578063b8fa3736146101fc578063c8ba6c871461022857610088565b806307b7ed991461008d5780630968f264146100b55780630a6d55d81461015b578063318c136e14610194575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610260565b005b6100b3600480360360208110156100cb57600080fd5b8101906020810181356401000000008111156100e657600080fd5b8201836020820111156100f857600080fd5b8035906020019184600183028401116401000000008311171561011a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610271945050505050565b6101786004803603602081101561017157600080fd5b5035610274565b604080516001600160a01b039092168252519081900360200190f35b61017861028f565b6101c2600480360360208110156101b257600080fd5b50356001600160a01b03166102b3565b604080519115158252519081900360200190f35b6101c2600480360360208110156101ec57600080fd5b50356001600160a01b03166102c8565b6100b36004803603604081101561021257600080fd5b50803590602001356001600160a01b03166102dd565b61024e6004803603602081101561023e57600080fd5b50356001600160a01b03166102f3565b60408051918252519081900360200190f35b610268610305565b61027181610384565b50565b6000602081905290815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b6102e5610305565b6102ef82826103ff565b5050565b60016020526000908152604090205481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610382576040805162461bcd60e51b815260206004820152601e60248201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604482015290519081900360640190fd5b565b6001600160a01b03811660009081526002602052604090205460ff166103db5760405162461bcd60e51b815260040180806020018281038252602481526020018061044d6024913960400191505060405180910390fd5b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b60008281526020818152604080832080546001600160a01b039095166001600160a01b0319909516851790559282526001808252838320949094556002905220805460ff1916909117905556fe70726f766964656420636f6e7472616374206973206e6f742077686974656c6973746564a26469706673582212208a8d0d23698e2e74e3c62ce96269902621a962774d9fdccc4e8da3c9e4ad98a464736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80636a70d0811161005b5780636a70d0811461019c5780637f79bea8146101d6578063b8fa3736146101fc578063c8ba6c871461022857610088565b806307b7ed991461008d5780630968f264146100b55780630a6d55d81461015b578063318c136e14610194575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610260565b005b6100b3600480360360208110156100cb57600080fd5b8101906020810181356401000000008111156100e657600080fd5b8201836020820111156100f857600080fd5b8035906020019184600183028401116401000000008311171561011a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610271945050505050565b6101786004803603602081101561017157600080fd5b5035610274565b604080516001600160a01b039092168252519081900360200190f35b61017861028f565b6101c2600480360360208110156101b257600080fd5b50356001600160a01b03166102b3565b604080519115158252519081900360200190f35b6101c2600480360360208110156101ec57600080fd5b50356001600160a01b03166102c8565b6100b36004803603604081101561021257600080fd5b50803590602001356001600160a01b03166102dd565b61024e6004803603602081101561023e57600080fd5b50356001600160a01b03166102f3565b60408051918252519081900360200190f35b610268610305565b61027181610384565b50565b6000602081905290815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205460ff1681565b60026020526000908152604090205460ff1681565b6102e5610305565b6102ef82826103ff565b5050565b60016020526000908152604090205481565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610382576040805162461bcd60e51b815260206004820152601e60248201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604482015290519081900360640190fd5b565b6001600160a01b03811660009081526002602052604090205460ff166103db5760405162461bcd60e51b815260040180806020018281038252602481526020018061044d6024913960400191505060405180910390fd5b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b60008281526020818152604080832080546001600160a01b039095166001600160a01b0319909516851790559282526001808252838320949094556002905220805460ff1916909117905556fe70726f766964656420636f6e7472616374206973206e6f742077686974656c6973746564a26469706673582212208a8d0d23698e2e74e3c62ce96269902621a962774d9fdccc4e8da3c9e4ad98a464736f6c634300060c0033",
  "immutableReferences": {
    "9652": [
      {
        "length": 32,
        "start": 657
      },
      {
        "length": 32,
        "start": 784
      }
    ]
  },
  "sourceMap": "273:2584:48:-:0;;;970:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;970:112:48;1045:30;;;;-1:-1:-1;;;;;;1045:30:48;;;-1:-1:-1;;;;;273:2584:48;;;;;;;;",
  "deployedSourceMap": "273:2584:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:120;;;;;;;;;;;;;;;;-1:-1:-1;2170:120:48;-1:-1:-1;;;;;2170:120:48;;:::i;:::-;;2296:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2296:65:48;;-1:-1:-1;2296:65:48;;-1:-1:-1;;;;;2296:65:48:i;408:69::-;;;;;;;;;;;;;;;;-1:-1:-1;408:69:48;;:::i;:::-;;;;-1:-1:-1;;;;;408:69:48;;;;;;;;;;;;;;318:39;;;:::i;755:42::-;;;;;;;;;;;;;;;;-1:-1:-1;755:42:48;-1:-1:-1;;;;;755:42:48;;:::i;:::-;;;;;;;;;;;;;;;;;;652:51;;;;;;;;;;;;;;;;-1:-1:-1;652:51:48;-1:-1:-1;;;;;652:51:48;;:::i;1774:154::-;;;;;;;;;;;;;;;;-1:-1:-1;1774:154:48;;;;;;-1:-1:-1;;;;;1774:154:48;;:::i;528:69::-;;;;;;;;;;;;;;;;-1:-1:-1;528:69:48;-1:-1:-1;;;;;528:69:48;;:::i;:::-;;;;;;;;;;;;;;;;2170:120;836:13;:11;:13::i;:::-;2254:29:::1;2267:15;2254:12;:29::i;:::-;2170:120:::0;:::o;408:69::-;;;;;;;;;;;;;-1:-1:-1;;;;;408:69:48;;:::o;318:39::-;;;:::o;755:42::-;;;;;;;;;;;;;;;:::o;652:51::-;;;;;;;;;;;;;;;:::o;1774:154::-;836:13;:11;:13::i;:::-;1880:41:::1;1893:10;1905:15;1880:12;:41::i;:::-;1774:154:::0;;:::o;528:69::-;;;;;;;;;;;;;:::o;1088:124::-;1142:10;-1:-1:-1;;;;;1156:14:48;1142:28;;1134:71;;;;;-1:-1:-1;;;1134:71:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;1088:124::o;2655:200::-;-1:-1:-1;;;;;2729:35:48;;;;;;:18;:35;;;;;;;;2721:84;;;;-1:-1:-1;;;2721:84:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2815:26:48;;;;;:9;:26;;;;;:33;;-1:-1:-1;;2815:33:48;2844:4;2815:33;;;2655:200::o;2367:282::-;2453:33;:45;;;;;;;;;;;:63;;-1:-1:-1;;;;;2453:63:48;;;-1:-1:-1;;;;;;2453:63:48;;;;;;;2526:50;;;2453:63;2526:50;;;;;;:63;;;;2600:18;:35;;;:42;;-1:-1:-1;;2600:42:48;;;;;;2367:282::o",
  "source": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.6.12;\n\nimport \"../interfaces/IERCHandler.sol\";\n\n/**\n    @title Function used across handler contracts.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with the Bridge contract.\n */\ncontract HandlerHelpers is IERCHandler {\n    address public immutable _bridgeAddress;\n\n    // resourceID => token contract address\n    mapping (bytes32 => address) public _resourceIDToTokenContractAddress;\n\n    // token contract address => resourceID\n    mapping (address => bytes32) public _tokenContractAddressToResourceID;\n\n    // token contract address => is whitelisted\n    mapping (address => bool) public _contractWhitelist;\n\n    // token contract address => is burnable\n    mapping (address => bool) public _burnList;\n\n    modifier onlyBridge() {\n        _onlyBridge();\n        _;\n    }\n    \n    /**\n        @param bridgeAddress Contract address of previously deployed Bridge.\n     */\n    constructor(\n        address          bridgeAddress\n    ) public {\n        _bridgeAddress = bridgeAddress;\n    }\n\n    function _onlyBridge() private view {\n        require(msg.sender == _bridgeAddress, \"sender must be bridge contract\");\n    }\n\n    /**\n        @notice First verifies {_resourceIDToContractAddress}[{resourceID}] and\n        {_contractAddressToResourceID}[{contractAddress}] are not already set,\n        then sets {_resourceIDToContractAddress} with {contractAddress},\n        {_contractAddressToResourceID} with {resourceID},\n        and {_contractWhitelist} to true for {contractAddress}.\n        @param resourceID ResourceID to be used when making deposits.\n        @param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n     */\n    function setResource(bytes32 resourceID, address contractAddress) external override onlyBridge {\n\n        _setResource(resourceID, contractAddress);\n    }\n\n    /**\n        @notice First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}]\n        to true.\n        @param contractAddress Address of contract to be used when making or executing deposits.\n     */\n    function setBurnable(address contractAddress) external override onlyBridge{\n        _setBurnable(contractAddress);\n    }\n\n    function withdraw(bytes memory data) external virtual override {}\n\n    function _setResource(bytes32 resourceID, address contractAddress) internal {\n        _resourceIDToTokenContractAddress[resourceID] = contractAddress;\n        _tokenContractAddressToResourceID[contractAddress] = resourceID;\n\n        _contractWhitelist[contractAddress] = true;\n    }\n\n    function _setBurnable(address contractAddress) internal {\n        require(_contractWhitelist[contractAddress], \"provided contract is not whitelisted\");\n        _burnList[contractAddress] = true;\n    }\n}\n",
  "sourcePath": "/home/sigo/w/deer/ethsub/packages/sol/contracts/handlers/HandlerHelpers.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/HandlerHelpers.sol",
    "exportedSymbols": {
      "HandlerHelpers": [
        9782
      ]
    },
    "id": 9783,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9646,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "42:23:48"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IERCHandler.sol",
        "file": "../interfaces/IERCHandler.sol",
        "id": 9647,
        "nodeType": "ImportDirective",
        "scope": 9783,
        "sourceUnit": 9841,
        "src": "67:39:48",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9649,
              "name": "IERCHandler",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9840,
              "src": "300:11:48",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERCHandler_$9840",
                "typeString": "contract IERCHandler"
              }
            },
            "id": 9650,
            "nodeType": "InheritanceSpecifier",
            "src": "300:11:48"
          }
        ],
        "contractDependencies": [
          9840
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 9648,
          "nodeType": "StructuredDocumentation",
          "src": "108:164:48",
          "text": "@title Function used across handler contracts.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 9782,
        "linearizedBaseContracts": [
          9782,
          9840
        ],
        "name": "HandlerHelpers",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "318c136e",
            "id": 9652,
            "mutability": "immutable",
            "name": "_bridgeAddress",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9782,
            "src": "318:39:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 9651,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "318:7:48",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0a6d55d8",
            "id": 9656,
            "mutability": "mutable",
            "name": "_resourceIDToTokenContractAddress",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9782,
            "src": "408:69:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 9655,
              "keyType": {
                "id": 9653,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "417:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "408:28:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 9654,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "428:7:48",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c8ba6c87",
            "id": 9660,
            "mutability": "mutable",
            "name": "_tokenContractAddressToResourceID",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9782,
            "src": "528:69:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
              "typeString": "mapping(address => bytes32)"
            },
            "typeName": {
              "id": 9659,
              "keyType": {
                "id": 9657,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "537:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "528:28:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                "typeString": "mapping(address => bytes32)"
              },
              "valueType": {
                "id": 9658,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "548:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7f79bea8",
            "id": 9664,
            "mutability": "mutable",
            "name": "_contractWhitelist",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9782,
            "src": "652:51:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 9663,
              "keyType": {
                "id": 9661,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "661:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "652:25:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 9662,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "672:4:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6a70d081",
            "id": 9668,
            "mutability": "mutable",
            "name": "_burnList",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9782,
            "src": "755:42:48",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 9667,
              "keyType": {
                "id": 9665,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "764:7:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "755:25:48",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 9666,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "775:4:48",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9674,
              "nodeType": "Block",
              "src": "826:41:48",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9670,
                      "name": "_onlyBridge",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9698,
                      "src": "836:11:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 9671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "836:13:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9672,
                  "nodeType": "ExpressionStatement",
                  "src": "836:13:48"
                },
                {
                  "id": 9673,
                  "nodeType": "PlaceholderStatement",
                  "src": "859:1:48"
                }
              ]
            },
            "documentation": null,
            "id": 9675,
            "name": "onlyBridge",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9669,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "823:2:48"
            },
            "src": "804:63:48",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9685,
              "nodeType": "Block",
              "src": "1035:47:48",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9681,
                      "name": "_bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9652,
                      "src": "1045:14:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9682,
                      "name": "bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9678,
                      "src": "1062:13:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1045:30:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 9684,
                  "nodeType": "ExpressionStatement",
                  "src": "1045:30:48"
                }
              ]
            },
            "documentation": {
              "id": 9676,
              "nodeType": "StructuredDocumentation",
              "src": "877:88:48",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge."
            },
            "id": 9686,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9678,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9686,
                  "src": "991:30:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9677,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "991:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "981:46:48"
            },
            "returnParameters": {
              "id": 9680,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1035:0:48"
            },
            "scope": 9782,
            "src": "970:112:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9697,
              "nodeType": "Block",
              "src": "1124:88:48",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 9693,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 9690,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1142:3:48",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 9691,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1142:10:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9692,
                          "name": "_bridgeAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9652,
                          "src": "1156:14:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1142:28:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73656e646572206d7573742062652062726964676520636f6e7472616374",
                        "id": 9694,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1172:32:48",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0febc0fc8991eb26dfaaceeb4d73d25b76da338550ed76c60410fec84388058e",
                          "typeString": "literal_string \"sender must be bridge contract\""
                        },
                        "value": "sender must be bridge contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0febc0fc8991eb26dfaaceeb4d73d25b76da338550ed76c60410fec84388058e",
                          "typeString": "literal_string \"sender must be bridge contract\""
                        }
                      ],
                      "id": 9689,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1134:7:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:71:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9696,
                  "nodeType": "ExpressionStatement",
                  "src": "1134:71:48"
                }
              ]
            },
            "documentation": null,
            "id": 9698,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyBridge",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9687,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1108:2:48"
            },
            "returnParameters": {
              "id": 9688,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1124:0:48"
            },
            "scope": 9782,
            "src": "1088:124:48",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "baseFunctions": [
              9827
            ],
            "body": {
              "id": 9714,
              "nodeType": "Block",
              "src": "1869:59:48",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9710,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9701,
                        "src": "1893:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9711,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9703,
                        "src": "1905:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9709,
                      "name": "_setResource",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9762,
                      "src": "1880:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1880:41:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9713,
                  "nodeType": "ExpressionStatement",
                  "src": "1880:41:48"
                }
              ]
            },
            "documentation": {
              "id": 9699,
              "nodeType": "StructuredDocumentation",
              "src": "1218:551:48",
              "text": "@notice First verifies {_resourceIDToContractAddress}[{resourceID}] and\n{_contractAddressToResourceID}[{contractAddress}] are not already set,\nthen sets {_resourceIDToContractAddress} with {contractAddress},\n{_contractAddressToResourceID} with {resourceID},\nand {_contractWhitelist} to true for {contractAddress}.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed."
            },
            "functionSelector": "b8fa3736",
            "id": 9715,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9707,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9706,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "1858:10:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1858:10:48"
              }
            ],
            "name": "setResource",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9705,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1849:8:48"
            },
            "parameters": {
              "id": 9704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9701,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9715,
                  "src": "1795:18:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9700,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1795:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9703,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9715,
                  "src": "1815:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9702,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1815:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1794:45:48"
            },
            "returnParameters": {
              "id": 9708,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1869:0:48"
            },
            "scope": 9782,
            "src": "1774:154:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9833
            ],
            "body": {
              "id": 9728,
              "nodeType": "Block",
              "src": "2244:46:48",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9725,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9718,
                        "src": "2267:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9724,
                      "name": "_setBurnable",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9781,
                      "src": "2254:12:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 9726,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2254:29:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9727,
                  "nodeType": "ExpressionStatement",
                  "src": "2254:29:48"
                }
              ]
            },
            "documentation": {
              "id": 9716,
              "nodeType": "StructuredDocumentation",
              "src": "1934:231:48",
              "text": "@notice First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}]\nto true.\n@param contractAddress Address of contract to be used when making or executing deposits."
            },
            "functionSelector": "07b7ed99",
            "id": 9729,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9722,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9721,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9675,
                  "src": "2234:10:48",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2234:10:48"
              }
            ],
            "name": "setBurnable",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9720,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2225:8:48"
            },
            "parameters": {
              "id": 9719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9718,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9729,
                  "src": "2191:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9717,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2191:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2190:25:48"
            },
            "returnParameters": {
              "id": 9723,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2244:0:48"
            },
            "scope": 9782,
            "src": "2170:120:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              9839
            ],
            "body": {
              "id": 9735,
              "nodeType": "Block",
              "src": "2359:2:48",
              "statements": []
            },
            "documentation": null,
            "functionSelector": "0968f264",
            "id": 9736,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9733,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2350:8:48"
            },
            "parameters": {
              "id": 9732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9731,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9736,
                  "src": "2314:17:48",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9730,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2314:5:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2313:19:48"
            },
            "returnParameters": {
              "id": 9734,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2359:0:48"
            },
            "scope": 9782,
            "src": "2296:65:48",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9761,
              "nodeType": "Block",
              "src": "2443:206:48",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9743,
                        "name": "_resourceIDToTokenContractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9656,
                        "src": "2453:33:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 9745,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9744,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9738,
                        "src": "2487:10:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2453:45:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9746,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9740,
                      "src": "2501:15:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2453:63:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 9748,
                  "nodeType": "ExpressionStatement",
                  "src": "2453:63:48"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9749,
                        "name": "_tokenContractAddressToResourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9660,
                        "src": "2526:33:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 9751,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9750,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9740,
                        "src": "2560:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2526:50:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9752,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9738,
                      "src": "2579:10:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2526:63:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 9754,
                  "nodeType": "ExpressionStatement",
                  "src": "2526:63:48"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9755,
                        "name": "_contractWhitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9664,
                        "src": "2600:18:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 9757,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9756,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9740,
                        "src": "2619:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2600:35:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 9758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2638:4:48",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2600:42:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9760,
                  "nodeType": "ExpressionStatement",
                  "src": "2600:42:48"
                }
              ]
            },
            "documentation": null,
            "id": 9762,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setResource",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9738,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9762,
                  "src": "2389:18:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9737,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2389:7:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9740,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9762,
                  "src": "2409:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9739,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2409:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2388:45:48"
            },
            "returnParameters": {
              "id": 9742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2443:0:48"
            },
            "scope": 9782,
            "src": "2367:282:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9780,
              "nodeType": "Block",
              "src": "2711:144:48",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 9768,
                          "name": "_contractWhitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9664,
                          "src": "2729:18:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 9770,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 9769,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9764,
                          "src": "2748:15:48",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2729:35:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726f766964656420636f6e7472616374206973206e6f742077686974656c6973746564",
                        "id": 9771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2766:38:48",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2daab49254b4a5228983fbc316d7992ab0064c3e34fa43dd7fbf9d5c4fe8b0da",
                          "typeString": "literal_string \"provided contract is not whitelisted\""
                        },
                        "value": "provided contract is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2daab49254b4a5228983fbc316d7992ab0064c3e34fa43dd7fbf9d5c4fe8b0da",
                          "typeString": "literal_string \"provided contract is not whitelisted\""
                        }
                      ],
                      "id": 9767,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2721:7:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2721:84:48",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9773,
                  "nodeType": "ExpressionStatement",
                  "src": "2721:84:48"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9778,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9774,
                        "name": "_burnList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9668,
                        "src": "2815:9:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 9776,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9775,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9764,
                        "src": "2825:15:48",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2815:26:48",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 9777,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2844:4:48",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2815:33:48",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9779,
                  "nodeType": "ExpressionStatement",
                  "src": "2815:33:48"
                }
              ]
            },
            "documentation": null,
            "id": 9781,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBurnable",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9764,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9781,
                  "src": "2677:23:48",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9763,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2677:7:48",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2676:25:48"
            },
            "returnParameters": {
              "id": 9766,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2711:0:48"
            },
            "scope": 9782,
            "src": "2655:200:48",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 9783,
        "src": "273:2584:48"
      }
    ],
    "src": "42:2816:48"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/handlers/HandlerHelpers.sol",
      "exportedSymbols": {
        "HandlerHelpers": [
          9782
        ]
      },
      "license": "LGPL-3.0-only"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".12"
          ]
        },
        "id": 9646,
        "name": "PragmaDirective",
        "src": "42:23:48"
      },
      {
        "attributes": {
          "SourceUnit": 9841,
          "absolutePath": "project:/contracts/interfaces/IERCHandler.sol",
          "file": "../interfaces/IERCHandler.sol",
          "scope": 9783,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 9647,
        "name": "ImportDirective",
        "src": "67:39:48"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            9840
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            9782,
            9840
          ],
          "name": "HandlerHelpers",
          "scope": 9783
        },
        "children": [
          {
            "attributes": {
              "text": "@title Function used across handler contracts.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
            },
            "id": 9648,
            "name": "StructuredDocumentation",
            "src": "108:164:48"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "IERCHandler",
                  "referencedDeclaration": 9840,
                  "type": "contract IERCHandler"
                },
                "id": 9649,
                "name": "UserDefinedTypeName",
                "src": "300:11:48"
              }
            ],
            "id": 9650,
            "name": "InheritanceSpecifier",
            "src": "300:11:48"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "318c136e",
              "mutability": "immutable",
              "name": "_bridgeAddress",
              "overrides": null,
              "scope": 9782,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 9651,
                "name": "ElementaryTypeName",
                "src": "318:7:48"
              }
            ],
            "id": 9652,
            "name": "VariableDeclaration",
            "src": "318:39:48"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "0a6d55d8",
              "mutability": "mutable",
              "name": "_resourceIDToTokenContractAddress",
              "overrides": null,
              "scope": 9782,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(bytes32 => address)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(bytes32 => address)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 9653,
                    "name": "ElementaryTypeName",
                    "src": "417:7:48"
                  },
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 9654,
                    "name": "ElementaryTypeName",
                    "src": "428:7:48"
                  }
                ],
                "id": 9655,
                "name": "Mapping",
                "src": "408:28:48"
              }
            ],
            "id": 9656,
            "name": "VariableDeclaration",
            "src": "408:69:48"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "c8ba6c87",
              "mutability": "mutable",
              "name": "_tokenContractAddressToResourceID",
              "overrides": null,
              "scope": 9782,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => bytes32)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => bytes32)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 9657,
                    "name": "ElementaryTypeName",
                    "src": "537:7:48"
                  },
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 9658,
                    "name": "ElementaryTypeName",
                    "src": "548:7:48"
                  }
                ],
                "id": 9659,
                "name": "Mapping",
                "src": "528:28:48"
              }
            ],
            "id": 9660,
            "name": "VariableDeclaration",
            "src": "528:69:48"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "7f79bea8",
              "mutability": "mutable",
              "name": "_contractWhitelist",
              "overrides": null,
              "scope": 9782,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => bool)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => bool)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 9661,
                    "name": "ElementaryTypeName",
                    "src": "661:7:48"
                  },
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 9662,
                    "name": "ElementaryTypeName",
                    "src": "672:4:48"
                  }
                ],
                "id": 9663,
                "name": "Mapping",
                "src": "652:25:48"
              }
            ],
            "id": 9664,
            "name": "VariableDeclaration",
            "src": "652:51:48"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "6a70d081",
              "mutability": "mutable",
              "name": "_burnList",
              "overrides": null,
              "scope": 9782,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => bool)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => bool)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 9665,
                    "name": "ElementaryTypeName",
                    "src": "764:7:48"
                  },
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 9666,
                    "name": "ElementaryTypeName",
                    "src": "775:4:48"
                  }
                ],
                "id": 9667,
                "name": "Mapping",
                "src": "755:25:48"
              }
            ],
            "id": 9668,
            "name": "VariableDeclaration",
            "src": "755:42:48"
          },
          {
            "attributes": {
              "documentation": null,
              "name": "onlyBridge",
              "overrides": null,
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9669,
                "name": "ParameterList",
                "src": "823:2:48"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9698,
                              "type": "function () view",
                              "value": "_onlyBridge"
                            },
                            "id": 9670,
                            "name": "Identifier",
                            "src": "836:11:48"
                          }
                        ],
                        "id": 9671,
                        "name": "FunctionCall",
                        "src": "836:13:48"
                      }
                    ],
                    "id": 9672,
                    "name": "ExpressionStatement",
                    "src": "836:13:48"
                  },
                  {
                    "id": 9673,
                    "name": "PlaceholderStatement",
                    "src": "859:1:48"
                  }
                ],
                "id": 9674,
                "name": "Block",
                "src": "826:41:48"
              }
            ],
            "id": 9675,
            "name": "ModifierDefinition",
            "src": "804:63:48"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "overrides": null,
              "scope": 9782,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "@param bridgeAddress Contract address of previously deployed Bridge."
                },
                "id": 9676,
                "name": "StructuredDocumentation",
                "src": "877:88:48"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "bridgeAddress",
                      "overrides": null,
                      "scope": 9686,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9677,
                        "name": "ElementaryTypeName",
                        "src": "991:7:48"
                      }
                    ],
                    "id": 9678,
                    "name": "VariableDeclaration",
                    "src": "991:30:48"
                  }
                ],
                "id": 9679,
                "name": "ParameterList",
                "src": "981:46:48"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9680,
                "name": "ParameterList",
                "src": "1035:0:48"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9652,
                              "type": "address",
                              "value": "_bridgeAddress"
                            },
                            "id": 9681,
                            "name": "Identifier",
                            "src": "1045:14:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9678,
                              "type": "address",
                              "value": "bridgeAddress"
                            },
                            "id": 9682,
                            "name": "Identifier",
                            "src": "1062:13:48"
                          }
                        ],
                        "id": 9683,
                        "name": "Assignment",
                        "src": "1045:30:48"
                      }
                    ],
                    "id": 9684,
                    "name": "ExpressionStatement",
                    "src": "1045:30:48"
                  }
                ],
                "id": 9685,
                "name": "Block",
                "src": "1035:47:48"
              }
            ],
            "id": 9686,
            "name": "FunctionDefinition",
            "src": "970:112:48"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_onlyBridge",
              "overrides": null,
              "scope": 9782,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9687,
                "name": "ParameterList",
                "src": "1108:2:48"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9688,
                "name": "ParameterList",
                "src": "1124:0:48"
              },
              {
                "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_0febc0fc8991eb26dfaaceeb4d73d25b76da338550ed76c60410fec84388058e",
                                  "typeString": "literal_string \"sender must be bridge contract\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 9689,
                            "name": "Identifier",
                            "src": "1134:7:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "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": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 9690,
                                    "name": "Identifier",
                                    "src": "1142:3:48"
                                  }
                                ],
                                "id": 9691,
                                "name": "MemberAccess",
                                "src": "1142:10:48"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9652,
                                  "type": "address",
                                  "value": "_bridgeAddress"
                                },
                                "id": 9692,
                                "name": "Identifier",
                                "src": "1156:14:48"
                              }
                            ],
                            "id": 9693,
                            "name": "BinaryOperation",
                            "src": "1142:28:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "73656e646572206d7573742062652062726964676520636f6e7472616374",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"sender must be bridge contract\"",
                              "value": "sender must be bridge contract"
                            },
                            "id": 9694,
                            "name": "Literal",
                            "src": "1172:32:48"
                          }
                        ],
                        "id": 9695,
                        "name": "FunctionCall",
                        "src": "1134:71:48"
                      }
                    ],
                    "id": 9696,
                    "name": "ExpressionStatement",
                    "src": "1134:71:48"
                  }
                ],
                "id": 9697,
                "name": "Block",
                "src": "1124:88:48"
              }
            ],
            "id": 9698,
            "name": "FunctionDefinition",
            "src": "1088:124:48"
          },
          {
            "attributes": {
              "baseFunctions": [
                9827
              ],
              "functionSelector": "b8fa3736",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setResource",
              "scope": 9782,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice First verifies {_resourceIDToContractAddress}[{resourceID}] and\n{_contractAddressToResourceID}[{contractAddress}] are not already set,\nthen sets {_resourceIDToContractAddress} with {contractAddress},\n{_contractAddressToResourceID} with {resourceID},\nand {_contractWhitelist} to true for {contractAddress}.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed."
                },
                "id": 9699,
                "name": "StructuredDocumentation",
                "src": "1218:551:48"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 9705,
                "name": "OverrideSpecifier",
                "src": "1849:8:48"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9715,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9700,
                        "name": "ElementaryTypeName",
                        "src": "1795:7:48"
                      }
                    ],
                    "id": 9701,
                    "name": "VariableDeclaration",
                    "src": "1795:18:48"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "overrides": null,
                      "scope": 9715,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9702,
                        "name": "ElementaryTypeName",
                        "src": "1815:7:48"
                      }
                    ],
                    "id": 9703,
                    "name": "VariableDeclaration",
                    "src": "1815:23:48"
                  }
                ],
                "id": 9704,
                "name": "ParameterList",
                "src": "1794:45:48"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9708,
                "name": "ParameterList",
                "src": "1869:0:48"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9706,
                    "name": "Identifier",
                    "src": "1858:10:48"
                  }
                ],
                "id": 9707,
                "name": "ModifierInvocation",
                "src": "1858:10:48"
              },
              {
                "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_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9762,
                              "type": "function (bytes32,address)",
                              "value": "_setResource"
                            },
                            "id": 9709,
                            "name": "Identifier",
                            "src": "1880:12:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9701,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9710,
                            "name": "Identifier",
                            "src": "1893:10:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9703,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9711,
                            "name": "Identifier",
                            "src": "1905:15:48"
                          }
                        ],
                        "id": 9712,
                        "name": "FunctionCall",
                        "src": "1880:41:48"
                      }
                    ],
                    "id": 9713,
                    "name": "ExpressionStatement",
                    "src": "1880:41:48"
                  }
                ],
                "id": 9714,
                "name": "Block",
                "src": "1869:59:48"
              }
            ],
            "id": 9715,
            "name": "FunctionDefinition",
            "src": "1774:154:48"
          },
          {
            "attributes": {
              "baseFunctions": [
                9833
              ],
              "functionSelector": "07b7ed99",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setBurnable",
              "scope": 9782,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}]\nto true.\n@param contractAddress Address of contract to be used when making or executing deposits."
                },
                "id": 9716,
                "name": "StructuredDocumentation",
                "src": "1934:231:48"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 9720,
                "name": "OverrideSpecifier",
                "src": "2225:8:48"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "overrides": null,
                      "scope": 9729,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9717,
                        "name": "ElementaryTypeName",
                        "src": "2191:7:48"
                      }
                    ],
                    "id": 9718,
                    "name": "VariableDeclaration",
                    "src": "2191:23:48"
                  }
                ],
                "id": 9719,
                "name": "ParameterList",
                "src": "2190:25:48"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9723,
                "name": "ParameterList",
                "src": "2244:0:48"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9675,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9721,
                    "name": "Identifier",
                    "src": "2234:10:48"
                  }
                ],
                "id": 9722,
                "name": "ModifierInvocation",
                "src": "2234:10:48"
              },
              {
                "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_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9781,
                              "type": "function (address)",
                              "value": "_setBurnable"
                            },
                            "id": 9724,
                            "name": "Identifier",
                            "src": "2254:12:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9718,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9725,
                            "name": "Identifier",
                            "src": "2267:15:48"
                          }
                        ],
                        "id": 9726,
                        "name": "FunctionCall",
                        "src": "2254:29:48"
                      }
                    ],
                    "id": 9727,
                    "name": "ExpressionStatement",
                    "src": "2254:29:48"
                  }
                ],
                "id": 9728,
                "name": "Block",
                "src": "2244:46:48"
              }
            ],
            "id": 9729,
            "name": "FunctionDefinition",
            "src": "2170:120:48"
          },
          {
            "attributes": {
              "baseFunctions": [
                9839
              ],
              "documentation": null,
              "functionSelector": "0968f264",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "withdraw",
              "scope": 9782,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 9733,
                "name": "OverrideSpecifier",
                "src": "2350:8:48"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 9736,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9730,
                        "name": "ElementaryTypeName",
                        "src": "2314:5:48"
                      }
                    ],
                    "id": 9731,
                    "name": "VariableDeclaration",
                    "src": "2314:17:48"
                  }
                ],
                "id": 9732,
                "name": "ParameterList",
                "src": "2313:19:48"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9734,
                "name": "ParameterList",
                "src": "2359:0:48"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 9735,
                "name": "Block",
                "src": "2359:2:48"
              }
            ],
            "id": 9736,
            "name": "FunctionDefinition",
            "src": "2296:65:48"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_setResource",
              "overrides": null,
              "scope": 9782,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9762,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9737,
                        "name": "ElementaryTypeName",
                        "src": "2389:7:48"
                      }
                    ],
                    "id": 9738,
                    "name": "VariableDeclaration",
                    "src": "2389:18:48"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "overrides": null,
                      "scope": 9762,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9739,
                        "name": "ElementaryTypeName",
                        "src": "2409:7:48"
                      }
                    ],
                    "id": 9740,
                    "name": "VariableDeclaration",
                    "src": "2409:23:48"
                  }
                ],
                "id": 9741,
                "name": "ParameterList",
                "src": "2388:45:48"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9742,
                "name": "ParameterList",
                "src": "2443:0:48"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9656,
                                  "type": "mapping(bytes32 => address)",
                                  "value": "_resourceIDToTokenContractAddress"
                                },
                                "id": 9743,
                                "name": "Identifier",
                                "src": "2453:33:48"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9738,
                                  "type": "bytes32",
                                  "value": "resourceID"
                                },
                                "id": 9744,
                                "name": "Identifier",
                                "src": "2487:10:48"
                              }
                            ],
                            "id": 9745,
                            "name": "IndexAccess",
                            "src": "2453:45:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9740,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9746,
                            "name": "Identifier",
                            "src": "2501:15:48"
                          }
                        ],
                        "id": 9747,
                        "name": "Assignment",
                        "src": "2453:63:48"
                      }
                    ],
                    "id": 9748,
                    "name": "ExpressionStatement",
                    "src": "2453:63:48"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9660,
                                  "type": "mapping(address => bytes32)",
                                  "value": "_tokenContractAddressToResourceID"
                                },
                                "id": 9749,
                                "name": "Identifier",
                                "src": "2526:33:48"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9740,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9750,
                                "name": "Identifier",
                                "src": "2560:15:48"
                              }
                            ],
                            "id": 9751,
                            "name": "IndexAccess",
                            "src": "2526:50:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9738,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9752,
                            "name": "Identifier",
                            "src": "2579:10:48"
                          }
                        ],
                        "id": 9753,
                        "name": "Assignment",
                        "src": "2526:63:48"
                      }
                    ],
                    "id": 9754,
                    "name": "ExpressionStatement",
                    "src": "2526:63:48"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9664,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 9755,
                                "name": "Identifier",
                                "src": "2600:18:48"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9740,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9756,
                                "name": "Identifier",
                                "src": "2619:15:48"
                              }
                            ],
                            "id": 9757,
                            "name": "IndexAccess",
                            "src": "2600:35:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 9758,
                            "name": "Literal",
                            "src": "2638:4:48"
                          }
                        ],
                        "id": 9759,
                        "name": "Assignment",
                        "src": "2600:42:48"
                      }
                    ],
                    "id": 9760,
                    "name": "ExpressionStatement",
                    "src": "2600:42:48"
                  }
                ],
                "id": 9761,
                "name": "Block",
                "src": "2443:206:48"
              }
            ],
            "id": 9762,
            "name": "FunctionDefinition",
            "src": "2367:282:48"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_setBurnable",
              "overrides": null,
              "scope": 9782,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "overrides": null,
                      "scope": 9781,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9763,
                        "name": "ElementaryTypeName",
                        "src": "2677:7:48"
                      }
                    ],
                    "id": 9764,
                    "name": "VariableDeclaration",
                    "src": "2677:23:48"
                  }
                ],
                "id": 9765,
                "name": "ParameterList",
                "src": "2676:25:48"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9766,
                "name": "ParameterList",
                "src": "2711:0:48"
              },
              {
                "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_2daab49254b4a5228983fbc316d7992ab0064c3e34fa43dd7fbf9d5c4fe8b0da",
                                  "typeString": "literal_string \"provided contract is not whitelisted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 9767,
                            "name": "Identifier",
                            "src": "2721:7:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9664,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 9768,
                                "name": "Identifier",
                                "src": "2729:18:48"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9764,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9769,
                                "name": "Identifier",
                                "src": "2748:15:48"
                              }
                            ],
                            "id": 9770,
                            "name": "IndexAccess",
                            "src": "2729:35:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "70726f766964656420636f6e7472616374206973206e6f742077686974656c6973746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"provided contract is not whitelisted\"",
                              "value": "provided contract is not whitelisted"
                            },
                            "id": 9771,
                            "name": "Literal",
                            "src": "2766:38:48"
                          }
                        ],
                        "id": 9772,
                        "name": "FunctionCall",
                        "src": "2721:84:48"
                      }
                    ],
                    "id": 9773,
                    "name": "ExpressionStatement",
                    "src": "2721:84:48"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9668,
                                  "type": "mapping(address => bool)",
                                  "value": "_burnList"
                                },
                                "id": 9774,
                                "name": "Identifier",
                                "src": "2815:9:48"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9764,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9775,
                                "name": "Identifier",
                                "src": "2825:15:48"
                              }
                            ],
                            "id": 9776,
                            "name": "IndexAccess",
                            "src": "2815:26:48"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 9777,
                            "name": "Literal",
                            "src": "2844:4:48"
                          }
                        ],
                        "id": 9778,
                        "name": "Assignment",
                        "src": "2815:33:48"
                      }
                    ],
                    "id": 9779,
                    "name": "ExpressionStatement",
                    "src": "2815:33:48"
                  }
                ],
                "id": 9780,
                "name": "Block",
                "src": "2711:144:48"
              }
            ],
            "id": 9781,
            "name": "FunctionDefinition",
            "src": "2655:200:48"
          }
        ],
        "id": 9782,
        "name": "ContractDefinition",
        "src": "273:2584:48"
      }
    ],
    "id": 9783,
    "name": "SourceUnit",
    "src": "42:2816:48"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.3",
  "updatedAt": "2021-11-29T02:07:34.275Z",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "bridgeAddress": "Contract address of previously deployed Bridge."
        }
      },
      "setBurnable(address)": {
        "params": {
          "contractAddress": "Address of contract to be used when making or executing deposits."
        }
      },
      "setResource(bytes32,address)": {
        "params": {
          "contractAddress": "Address of contract to be called when a deposit is made and a deposited is executed.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "withdraw(bytes)": {
        "params": {
          "data": "ABI-encoded withdrawal params relevant to the handler."
        }
      }
    },
    "title": "Function used across handler contracts.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "setBurnable(address)": {
        "notice": "First verifies {contractAddress} is whitelisted, then sets {_burnList}[{contractAddress}] to true."
      },
      "setResource(bytes32,address)": {
        "notice": "First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, and {_contractWhitelist} to true for {contractAddress}."
      },
      "withdraw(bytes)": {
        "notice": "Withdraw funds from ERC safes."
      }
    },
    "notice": "This contract is intended to be used with the Bridge contract.",
    "version": 1
  }
}