{
  "contractName": "GenericHandler",
  "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": "_contractAddressToDepositFunctionDepositerOffset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_contractAddressToDepositFunctionSignature",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_contractAddressToExecuteFunctionSignature",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_contractAddressToResourceID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": "_resourceIDToContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "depositFunctionSig",
          "type": "bytes4"
        },
        {
          "internalType": "uint256",
          "name": "depositFunctionDepositerOffset",
          "type": "uint256"
        },
        {
          "internalType": "bytes4",
          "name": "executeFunctionSig",
          "type": "bytes4"
        }
      ],
      "name": "setResource",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "depositer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "executeProposal",
      "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\":\"_contractAddressToDepositFunctionDepositerOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractAddressToDepositFunctionSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractAddressToExecuteFunctionSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_contractAddressToResourceID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"_resourceIDToContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"depositer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"depositFunctionSig\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"depositFunctionDepositerOffset\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"executeFunctionSig\",\"type\":\"bytes4\"}],\"name\":\"setResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\"}},\"deposit(bytes32,address,bytes)\":{\"params\":{\"data\":\"Consists of: {resourceID}, {lenMetaData}, and {metaData} all padded to 32 bytes.\",\"depositer\":\"Address of the account making deposit in the Bridge contract.\",\"resourceID\":\"ResourceID used to find address of contract to be used for deposit.\"},\"returns\":{\"_0\":\"Returns the raw bytes returned from the call to {contractAddress}.\"}},\"executeProposal(bytes32,bytes)\":{\"params\":{\"data\":\"Consists of {resourceID}, {lenMetaData}, and {metaData}.\"}},\"setResource(bytes32,address,bytes4,uint256,bytes4)\":{\"params\":{\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"depositFunctionDepositerOffset\":\"Depositer address position offset in the metadata, in bytes.\",\"depositFunctionSig\":\"Function signature of method to be called in {contractAddress} when a deposit is made.\",\"executeFunctionSig\":\"Function signature of method to be called in {contractAddress} when a deposit is executed.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}}},\"title\":\"Handles generic deposits and deposit executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit(bytes32,address,bytes)\":{\"notice\":\"A deposit is initiatied by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: len(data)                              uint256     bytes  0  - 32 data                                   bytes       bytes  64 - END{contractAddress} is required to be whitelistedIf {_contractAddressToDepositFunctionSignature}[{contractAddress}] is set, {metaData} is expected to consist of needed function arguments.\"},\"executeProposal(bytes32,bytes)\":{\"notice\":\"Proposal execution should be initiated when a proposal is finalized in the Bridge contract.Data passed into the function should be constructed as follows: len(data)                              uint256     bytes  0  - 32 data                                   bytes       bytes  32 - END{contractAddress} is required to be whitelistedIf {_contractAddressToExecuteFunctionSignature}[{contractAddress}] is set, {metaData} is expected to consist of needed function arguments.\"},\"setResource(bytes32,address,bytes4,uint256,bytes4)\":{\"notice\":\"First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, {_contractAddressToDepositFunctionSignature} with {depositFunctionSig}, {_contractAddressToDepositFunctionDepositerOffset} with {depositFunctionDepositerOffset}, {_contractAddressToExecuteFunctionSignature} with {executeFunctionSig}, and {_contractWhitelist} to true for {contractAddress}.\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/GenericHandler.sol\":\"GenericHandler\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/handlers/GenericHandler.sol\":{\"keccak256\":\"0x6d0039f35c896c5a217b9cb147b7627b9980382cdc86fabef6a34c051ae0785f\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://9412770b7555bdb49ec0e370ee4ccd84035de105383f077bc7872b70b6f9d421\",\"dweb:/ipfs/QmYmCbF2oceeXN3kqo7qYKJeLoAdkNEs8Pcm5Zu6uzHw4K\"]},\"project:/contracts/interfaces/IGenericHandler.sol\":{\"keccak256\":\"0xb08694c5d5e003ab884d7f22fd616d9603ae60a9d8d48901feb2c2daebfe0d40\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://310082dd159a2b23c4cf8589a19ef3e31146d2879145c452e4edf63b11389008\",\"dweb:/ipfs/QmRzAnt66RzitcJrwTfxQeK1X1GSo9TEQF7y3WWbYZYxGS\"]}},\"version\":1}",
  "bytecode": "0x60a060405234801561001057600080fd5b50604051610b80380380610b8083398101604081905261002f91610044565b60601b6001600160601b031916608052610072565b600060208284031215610055578081fd5b81516001600160a01b038116811461006b578182fd5b9392505050565b60805160601c610aec610094600039806101a452806105de5250610aec6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063c54c2a1111610066578063c54c2a1114610141578063cb62446314610154578063de319d9914610167578063e248cff21461017c578063ec97d3b41461018f5761009e565b8063318c136e146100a35780637f79bea8146100c1578063a5c3a985146100e1578063aa50800b14610101578063b07e54bb14610121575b600080fd5b6100ab6101a2565b6040516100b8919061089f565b60405180910390f35b6100d46100cf36600461070c565b6101c6565b6040516100b891906108b3565b6100f46100ef36600461070c565b6101db565b6040516100b891906108c7565b61011461010f36600461070c565b6101f0565b6040516100b891906108be565b61013461012f3660046107af565b610202565b6040516100b891906108dc565b6100ab61014f36600461072e565b6103f5565b6100f461016236600461070c565b610410565b61017a610175366004610746565b610425565b005b61017a61018a366004610808565b610441565b61011461019d36600461070c565b6105c1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60056020526000908152604090205460ff1681565b60046020526000908152604090205460e01b81565b60036020526000908152604090205481565b606061020c6105d3565b6000606061021c8486018661072e565b915061022e6020808401908688610a45565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508b815260208181526040808320546001600160a01b031680845260039092529091205494955093925050811590506102ce57828101602001516001600160a01b038916606082901c146102cc5760405162461bcd60e51b81526004016102c39061098c565b60405180910390fd5b505b6001600160a01b03821660009081526005602052604090205460ff166103065760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03821660009081526002602052604090205460e01b6001600160e01b03198116156103e75760608185604051602001610347929190610852565b604051602081830303815290604052905060006060856001600160a01b0316836040516103749190610883565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b5091509150816103d85760405162461bcd60e51b81526004016102c390610a0e565b97506103ed9650505050505050565b50505050505b949350505050565b6000602081905290815260409020546001600160a01b031681565b60026020526000908152604090205460e01b81565b61042d6105d3565b61043a858585858561061d565b5050505050565b6104496105d3565b600060606104598385018561072e565b915061046b6020808401908587610a45565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525089815260208181526040808320546001600160a01b03168084526005909252909120549495509360ff1692506104e69150505760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03811660009081526004602052604090205460e01b6001600160e01b03198116156105b85760608184604051602001610527929190610852565b60405160208183030381529060405290506000836001600160a01b0316826040516105529190610883565b6000604051808303816000865af19150503d806000811461058f576040519150601f19603f3d011682016040523d82523d6000602084013e610594565b606091505b50509050806105b55760405162461bcd60e51b81526004016102c390610946565b50505b50505050505050565b60016020526000908152604090205481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461061b5760405162461bcd60e51b81526004016102c39061090f565b565b60008581526020818152604080832080546001600160a01b039098166001600160a01b03199098168817905595825260018082528683209790975560028152858220805460e096871c63ffffffff199182161790915560038252868320949094556004815285822080549390951c92909316919091179092556005905220805460ff19169091179055565b80356001600160a01b03811681146106bf57600080fd5b92915050565b60008083601f8401126106d6578182fd5b50813567ffffffffffffffff8111156106ed578182fd5b60208301915083602082850101111561070557600080fd5b9250929050565b60006020828403121561071d578081fd5b61072783836106a8565b9392505050565b60006020828403121561073f578081fd5b5035919050565b600080600080600060a0868803121561075d578081fd5b8535945060208601356001600160a01b038116811461077a578182fd5b9350604086013561078a81610a9d565b92506060860135915060808601356107a181610a9d565b809150509295509295909350565b600080600080606085870312156107c4578384fd5b843593506107d586602087016106a8565b9250604085013567ffffffffffffffff8111156107f0578283fd5b6107fc878288016106c5565b95989497509550505050565b60008060006040848603121561081c578283fd5b83359250602084013567ffffffffffffffff811115610839578283fd5b610845868287016106c5565b9497909650939450505050565b6001600160e01b0319831681528151600090610875816004850160208701610a6d565b919091016004019392505050565b60008251610895818460208701610a6d565b9190910192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b60006020825282518060208401526108fb816040850160208701610a6d565b601f01601f19169190910160400192915050565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526026908201527f64656c656761746563616c6c20746f20636f6e7472616374416464726573732060408201526519985a5b195960d21b606082015260800190565b6020808252601f908201527f696e636f7272656374206465706f736974657220696e20746865206461746100604082015260600190565b6020808252602b908201527f70726f766964656420636f6e747261637441646472657373206973206e6f742060408201526a1dda1a5d195b1a5cdd195960aa1b606082015260800190565b6020808252601e908201527f63616c6c20746f20636f6e747261637441646472657373206661696c65640000604082015260600190565b60008085851115610a54578182fd5b83861115610a60578182fd5b5050820193919092039150565b60005b83811015610a88578181015183820152602001610a70565b83811115610a97576000848401525b50505050565b6001600160e01b031981168114610ab357600080fd5b5056fea26469706673582212206629f1b20a59266ba81cd21a0a9659a1ccffc5bda3d96cf6d3743ab5f1eab7cf64736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063c54c2a1111610066578063c54c2a1114610141578063cb62446314610154578063de319d9914610167578063e248cff21461017c578063ec97d3b41461018f5761009e565b8063318c136e146100a35780637f79bea8146100c1578063a5c3a985146100e1578063aa50800b14610101578063b07e54bb14610121575b600080fd5b6100ab6101a2565b6040516100b8919061089f565b60405180910390f35b6100d46100cf36600461070c565b6101c6565b6040516100b891906108b3565b6100f46100ef36600461070c565b6101db565b6040516100b891906108c7565b61011461010f36600461070c565b6101f0565b6040516100b891906108be565b61013461012f3660046107af565b610202565b6040516100b891906108dc565b6100ab61014f36600461072e565b6103f5565b6100f461016236600461070c565b610410565b61017a610175366004610746565b610425565b005b61017a61018a366004610808565b610441565b61011461019d36600461070c565b6105c1565b7f000000000000000000000000000000000000000000000000000000000000000081565b60056020526000908152604090205460ff1681565b60046020526000908152604090205460e01b81565b60036020526000908152604090205481565b606061020c6105d3565b6000606061021c8486018661072e565b915061022e6020808401908688610a45565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508b815260208181526040808320546001600160a01b031680845260039092529091205494955093925050811590506102ce57828101602001516001600160a01b038916606082901c146102cc5760405162461bcd60e51b81526004016102c39061098c565b60405180910390fd5b505b6001600160a01b03821660009081526005602052604090205460ff166103065760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03821660009081526002602052604090205460e01b6001600160e01b03198116156103e75760608185604051602001610347929190610852565b604051602081830303815290604052905060006060856001600160a01b0316836040516103749190610883565b6000604051808303816000865af19150503d80600081146103b1576040519150601f19603f3d011682016040523d82523d6000602084013e6103b6565b606091505b5091509150816103d85760405162461bcd60e51b81526004016102c390610a0e565b97506103ed9650505050505050565b50505050505b949350505050565b6000602081905290815260409020546001600160a01b031681565b60026020526000908152604090205460e01b81565b61042d6105d3565b61043a858585858561061d565b5050505050565b6104496105d3565b600060606104598385018561072e565b915061046b6020808401908587610a45565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525089815260208181526040808320546001600160a01b03168084526005909252909120549495509360ff1692506104e69150505760405162461bcd60e51b81526004016102c3906109c3565b6001600160a01b03811660009081526004602052604090205460e01b6001600160e01b03198116156105b85760608184604051602001610527929190610852565b60405160208183030381529060405290506000836001600160a01b0316826040516105529190610883565b6000604051808303816000865af19150503d806000811461058f576040519150601f19603f3d011682016040523d82523d6000602084013e610594565b606091505b50509050806105b55760405162461bcd60e51b81526004016102c390610946565b50505b50505050505050565b60016020526000908152604090205481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461061b5760405162461bcd60e51b81526004016102c39061090f565b565b60008581526020818152604080832080546001600160a01b039098166001600160a01b03199098168817905595825260018082528683209790975560028152858220805460e096871c63ffffffff199182161790915560038252868320949094556004815285822080549390951c92909316919091179092556005905220805460ff19169091179055565b80356001600160a01b03811681146106bf57600080fd5b92915050565b60008083601f8401126106d6578182fd5b50813567ffffffffffffffff8111156106ed578182fd5b60208301915083602082850101111561070557600080fd5b9250929050565b60006020828403121561071d578081fd5b61072783836106a8565b9392505050565b60006020828403121561073f578081fd5b5035919050565b600080600080600060a0868803121561075d578081fd5b8535945060208601356001600160a01b038116811461077a578182fd5b9350604086013561078a81610a9d565b92506060860135915060808601356107a181610a9d565b809150509295509295909350565b600080600080606085870312156107c4578384fd5b843593506107d586602087016106a8565b9250604085013567ffffffffffffffff8111156107f0578283fd5b6107fc878288016106c5565b95989497509550505050565b60008060006040848603121561081c578283fd5b83359250602084013567ffffffffffffffff811115610839578283fd5b610845868287016106c5565b9497909650939450505050565b6001600160e01b0319831681528151600090610875816004850160208701610a6d565b919091016004019392505050565b60008251610895818460208701610a6d565b9190910192915050565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b60006020825282518060208401526108fb816040850160208701610a6d565b601f01601f19169190910160400192915050565b6020808252601e908201527f73656e646572206d7573742062652062726964676520636f6e74726163740000604082015260600190565b60208082526026908201527f64656c656761746563616c6c20746f20636f6e7472616374416464726573732060408201526519985a5b195960d21b606082015260800190565b6020808252601f908201527f696e636f7272656374206465706f736974657220696e20746865206461746100604082015260600190565b6020808252602b908201527f70726f766964656420636f6e747261637441646472657373206973206e6f742060408201526a1dda1a5d195b1a5cdd195960aa1b606082015260800190565b6020808252601e908201527f63616c6c20746f20636f6e747261637441646472657373206661696c65640000604082015260600190565b60008085851115610a54578182fd5b83861115610a60578182fd5b5050820193919092039150565b60005b83811015610a88578181015183820152602001610a70565b83811115610a97576000848401525b50505050565b6001600160e01b031981168114610ab357600080fd5b5056fea26469706673582212206629f1b20a59266ba81cd21a0a9659a1ccffc5bda3d96cf6d3743ab5f1eab7cf64736f6c634300060c0033",
  "immutableReferences": {
    "9306": [
      {
        "length": 32,
        "start": 420
      },
      {
        "length": 32,
        "start": 1502
      }
    ]
  },
  "sourceMap": "320:7447:47:-:0;;;1484:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1559:30;;-1:-1:-1;;;;;;1559:30:47;;;320:7447;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;576:54;;701:35;;691:2;;-1:-1;;740:12;691:2;319:74;223:186;-1:-1;;;223:186::o;:::-;320:7447:47;;;;;;;;;;;",
  "deployedSourceMap": "320:7447:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;369:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1134:51;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1002:77::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;848:84::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4062:1565::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;453:64::-;;;;;;:::i;:::-;;:::i;687:77::-;;;;;;:::i;:::-;;:::i;2769:366::-;;;;;;:::i;:::-;;:::i;:::-;;6290:769;;;;;;:::i;:::-;;:::i;562:64::-;;;;;;:::i;:::-;;:::i;369:39::-;;;:::o;1134:51::-;;;;;;;;;;;;;;;:::o;1002:77::-;;;;;;;;;;;;;;;:::o;848:84::-;;;;;;;;;;;;;:::o;4062:1565::-;4168:12;1224:13;:11;:13::i;:::-;4192:24:::1;4226:21;4272:27;::::0;;::::1;4283:4:::0;4272:27:::1;:::i;:::-;4258:41:::0;-1:-1:-1;4326:25:47::1;4331:2;4334:16:::0;;::::1;::::0;4326:4;;:25:::1;:::i;:::-;4309:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4389:40:47;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;4389:40:47::1;4465:65:::0;;;:48:::1;:65:::0;;;;;;;4309:43;;-1:-1:-1;4389:40:47;4465:65;-1:-1:-1;;4544:19:47;;;-1:-1:-1;4540:594:47::1;;4749:39:::0;;;4767:2:::1;4749:39:::0;4743:46;-1:-1:-1;;;;;5042:45:47;::::1;5084:2;5063:23:::0;;::::1;5042:45;5034:89;;;;-1:-1:-1::0;;;5034:89:47::1;;;;;;;:::i;:::-;;;;;;;;;4540:594;;-1:-1:-1::0;;;;;5152:35:47;::::1;;::::0;;;:18:::1;:35;::::0;;;;;::::1;;5144:91;;;;-1:-1:-1::0;;;5144:91:47::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5259:59:47;::::1;5246:10;5259:59:::0;;;:42:::1;:59;::::0;;;;;::::1;;-1:-1:-1::0;;;;;;5332:16:47;::::1;::::0;5328:293:::1;;5364:21;5405:3;5410:8;5388:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5364:55;;5434:12;5448:28;5480:15;-1:-1:-1::0;;;;;5480:20:47::1;5501:8;5480:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5433:77;;;;5532:7;5524:50;;;;-1:-1:-1::0;;;5524:50:47::1;;;;;;;:::i;:::-;5595:15:::0;-1:-1:-1;5588:22:47::1;::::0;-1:-1:-1;;;;;;;5588:22:47::1;5328:293;1247:1;;;;;;4062:1565:::0;;;;;;:::o;453:64::-;;;;;;;;;;;;;-1:-1:-1;;;;;453:64:47;;:::o;687:77::-;;;;;;;;;;;;;;;:::o;2769:366::-;1224:13;:11;:13::i;:::-;3015:113:::1;3028:10;3040:15;3057:18;3077:30;3109:18;3015:12;:113::i;:::-;2769:366:::0;;;;;:::o;6290:769::-;1224:13;:11;:13::i;:::-;6386:24:::1;6420:21;6466:27;::::0;;::::1;6477:4:::0;6466:27:::1;:::i;:::-;6452:41:::0;-1:-1:-1;6520:25:47::1;6525:2;6528:16:::0;;::::1;::::0;6520:4;;:25:::1;:::i;:::-;6503:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;6583:40:47;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;6583:40:47::1;6641:35:::0;;;:18:::1;:35:::0;;;;;;;6503:43;;-1:-1:-1;6583:40:47;6641:35:::1;;::::0;-1:-1:-1;6633:91:47::1;::::0;-1:-1:-1;;6633:91:47::1;;;-1:-1:-1::0;;;6633:91:47::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6748:59:47;::::1;6735:10;6748:59:::0;;;:42:::1;:59;::::0;;;;;::::1;;-1:-1:-1::0;;;;;;6821:16:47;::::1;::::0;6817:236:::1;;6853:21;6894:3;6899:8;6877:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6853:55;;6923:12;6940:15;-1:-1:-1::0;;;;;6940:20:47::1;6961:8;6940:30;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6922:48;;;6992:7;6984:58;;;;-1:-1:-1::0;;;6984:58:47::1;;;;;;;:::i;:::-;6817:236;;;1247:1;;;;6290:769:::0;;;:::o;562:64::-;;;;;;;;;;;;;:::o;1261:124::-;1315:10;-1:-1:-1;;;;;1329:14:47;1315:28;;1307:71;;;;-1:-1:-1;;;1307:71:47;;;;;;;:::i;:::-;1261:124::o;7065:700::-;7291:28;:40;;;;;;;;;;;:58;;-1:-1:-1;;;;;7291:58:47;;;-1:-1:-1;;;;;;7291:58:47;;;;;;;7359:45;;;7291:58;7359:45;;;;;;:58;;;;7427:42;:59;;;;;:80;;;;;;-1:-1:-1;;7427:80:47;;;;;;;7517:48;:65;;;;;:98;;;;7625:42;:59;;;;;:80;;;;;;;;;;;;;;;;;7716:18;:35;;;:42;;-1:-1:-1;;7716:42:47;;;;;;7065:700::o;5:130:-1:-;72:20;;-1:-1;;;;;12443:54;;13109:35;;13099:2;;13158:1;;13148:12;13099:2;57:78;;;;:::o;428:336::-;;;542:3;535:4;527:6;523:17;519:27;509:2;;-1:-1;;550:12;509:2;-1:-1;580:20;;620:18;609:30;;606:2;;;-1:-1;;642:12;606:2;686:4;678:6;674:17;662:29;;737:3;686:4;717:17;678:6;703:32;;700:41;697:2;;;754:1;;744:12;697:2;502:262;;;;;:::o;909:241::-;;1013:2;1001:9;992:7;988:23;984:32;981:2;;;-1:-1;;1019:12;981:2;1081:53;1126:7;1102:22;1081:53;:::i;:::-;1071:63;975:175;-1:-1;;;975:175::o;1157:241::-;;1261:2;1249:9;1240:7;1236:23;1232:32;1229:2;;;-1:-1;;1267:12;1229:2;-1:-1;209:20;;1223:175;-1:-1;1223:175::o;1405:739::-;;;;;;1575:3;1563:9;1554:7;1550:23;1546:33;1543:2;;;-1:-1;;1582:12;1543:2;209:20;;;-1:-1;1734:2;1773:22;;72:20;-1:-1;;;;;12443:54;;13109:35;;13099:2;;-1:-1;;13148:12;13099:2;1742:63;-1:-1;1842:2;1880:22;;345:20;370:32;345:20;370:32;:::i;:::-;1850:62;-1:-1;1949:2;1988:22;;839:20;;-1:-1;2057:3;2096:22;;345:20;370:32;345:20;370:32;:::i;:::-;2066:62;;;;1537:607;;;;;;;;:::o;2151:615::-;;;;;2308:2;2296:9;2287:7;2283:23;2279:32;2276:2;;;-1:-1;;2314:12;2276:2;222:6;209:20;2366:63;;2484:53;2529:7;2466:2;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2602:2;2591:9;2587:18;2574:32;2626:18;2618:6;2615:30;2612:2;;;-1:-1;;2648:12;2612:2;2686:64;2742:7;2733:6;2722:9;2718:22;2686:64;:::i;:::-;2270:496;;;;-1:-1;2668:82;-1:-1;;;;2270:496::o;2773:490::-;;;;2913:2;2901:9;2892:7;2888:23;2884:32;2881:2;;;-1:-1;;2919:12;2881:2;222:6;209:20;2971:63;;3099:2;3088:9;3084:18;3071:32;3123:18;3115:6;3112:30;3109:2;;;-1:-1;;3145:12;3109:2;3183:64;3239:7;3230:6;3219:9;3215:22;3183:64;:::i;:::-;2875:388;;3165:82;;-1:-1;3165:82;;-1:-1;;;;2875:388::o;6765:405::-;-1:-1;;;;;;12291:78;;3938:36;;11099:12;;6765:405;;4762:52;11099:12;7032:1;7023:11;;4795:4;4784:16;;4762:52;:::i;:::-;4826:16;;;;7032:1;4826:16;;6925:245;-1:-1;;;6925:245::o;7177:271::-;;4651:5;11099:12;4762:52;4807:6;4802:3;4795:4;4788:5;4784:16;4762:52;:::i;:::-;4826:16;;;;;7311:137;-1:-1;;7311:137::o;7455:222::-;-1:-1;;;;;12443:54;;;;3589:37;;7582:2;7567:18;;7553:124::o;7684:210::-;12125:13;;12118:21;3703:34;;7805:2;7790:18;;7776:118::o;7901:222::-;3820:37;;;8028:2;8013:18;;7999:124::o;8130:218::-;-1:-1;;;;;;12291:78;;;;3938:36;;8255:2;8240:18;;8226:122::o;8355:306::-;;8500:2;8521:17;8514:47;4283:5;11099:12;11255:6;8500:2;8489:9;8485:18;11243:19;4376:52;4421:6;11283:14;8489:9;11283:14;8500:2;4402:5;4398:16;4376:52;:::i;:::-;13029:7;13013:14;-1:-1;;13009:28;4440:39;;;;11283:14;4440:39;;8471:190;-1:-1;;8471:190::o;8668:416::-;8868:2;8882:47;;;5079:2;8853:18;;;11243:19;5115:32;11283:14;;;5095:53;5167:12;;;8839:245::o;9091:416::-;9291:2;9305:47;;;5418:2;9276:18;;;11243:19;5454:34;11283:14;;;5434:55;-1:-1;;;5509:12;;;5502:30;5551:12;;;9262:245::o;9514:416::-;9714:2;9728:47;;;5802:2;9699:18;;;11243:19;5838:33;11283:14;;;5818:54;5891:12;;;9685:245::o;9937:416::-;10137:2;10151:47;;;6142:2;10122:18;;;11243:19;6178:34;11283:14;;;6158:55;-1:-1;;;6233:12;;;6226:35;6280:12;;;10108:245::o;10360:416::-;10560:2;10574:47;;;6531:2;10545:18;;;11243:19;6567:32;11283:14;;;6547:53;6619:12;;;10531:245::o;11636:318::-;;;11786:8;11774:10;11771:24;11768:2;;;-1:-1;;11798:12;11768:2;11833:6;11823:8;11820:20;11817:2;;;-1:-1;;11843:12;11817:2;-1:-1;;11875:31;;;11924:25;;;;;-1:-1;11762:192::o;12589:268::-;12654:1;12661:101;12675:6;12672:1;12669:13;12661:101;;;12742:11;;;12736:18;12723:11;;;12716:39;12697:2;12690:10;12661:101;;;12777:6;12774:1;12771:13;12768:2;;;12654:1;12833:6;12828:3;12824:16;12817:27;12768:2;;12638:219;;;:::o;13298:115::-;-1:-1;;;;;;12291:78;;13356:34;;13346:2;;13404:1;;13394:12;13346:2;13340:73;:::o",
  "source": "// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\n\nimport \"../interfaces/IGenericHandler.sol\";\n\n/**\n    @title Handles generic deposits and deposit executions.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with the Bridge contract.\n */\ncontract GenericHandler is IGenericHandler {\n    address public immutable _bridgeAddress;\n\n    // resourceID => contract address\n    mapping (bytes32 => address) public _resourceIDToContractAddress;\n\n    // contract address => resourceID\n    mapping (address => bytes32) public _contractAddressToResourceID;\n\n    // contract address => deposit function signature\n    mapping (address => bytes4) public _contractAddressToDepositFunctionSignature;\n\n    // contract address => depositer address position offset in the metadata\n    mapping (address => uint256) public _contractAddressToDepositFunctionDepositerOffset;\n\n    // contract address => execute proposal function signature\n    mapping (address => bytes4) public _contractAddressToExecuteFunctionSignature;\n\n    // token contract address => is whitelisted\n    mapping (address => bool) public _contractWhitelist;\n\n    modifier onlyBridge() {\n        _onlyBridge();\n        _;\n    }\n\n    function _onlyBridge() private view {\n        require(msg.sender == _bridgeAddress, \"sender must be bridge contract\");\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    /**\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        {_contractAddressToDepositFunctionSignature} with {depositFunctionSig},\n        {_contractAddressToDepositFunctionDepositerOffset} with {depositFunctionDepositerOffset},\n        {_contractAddressToExecuteFunctionSignature} with {executeFunctionSig},\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        @param depositFunctionSig Function signature of method to be called in {contractAddress} when a deposit is made.\n        @param depositFunctionDepositerOffset Depositer address position offset in the metadata, in bytes.\n        @param executeFunctionSig Function signature of method to be called in {contractAddress} when a deposit is executed.\n     */\n    function setResource(\n        bytes32 resourceID,\n        address contractAddress,\n        bytes4 depositFunctionSig,\n        uint256 depositFunctionDepositerOffset,\n        bytes4 executeFunctionSig\n    ) external onlyBridge override {\n\n        _setResource(resourceID, contractAddress, depositFunctionSig, depositFunctionDepositerOffset, executeFunctionSig);\n    }\n\n    /**\n        @notice A deposit is initiatied by making a deposit in the Bridge contract.\n        @param resourceID ResourceID used to find address of contract to be used for deposit.\n        @param depositer Address of the account making deposit in the Bridge contract.\n        @param data Consists of: {resourceID}, {lenMetaData}, and {metaData} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        len(data)                              uint256     bytes  0  - 32\n        data                                   bytes       bytes  64 - END\n        @notice {contractAddress} is required to be whitelisted\n        @notice If {_contractAddressToDepositFunctionSignature}[{contractAddress}] is set,\n        {metaData} is expected to consist of needed function arguments.\n        @return Returns the raw bytes returned from the call to {contractAddress}.\n     */\n    function deposit(bytes32 resourceID, address depositer, bytes calldata data) external onlyBridge returns (bytes memory) {\n        uint256      lenMetadata;\n        bytes memory metadata;\n\n        lenMetadata = abi.decode(data, (uint256));\n        metadata = bytes(data[32:32 + lenMetadata]);\n\n        address contractAddress = _resourceIDToContractAddress[resourceID];\n        uint256 depositerOffset = _contractAddressToDepositFunctionDepositerOffset[contractAddress];\n        if (depositerOffset > 0) {\n            uint256 metadataDepositer;\n            // Skipping 32 bytes of length prefix and depositerOffset bytes.\n            assembly {\n                metadataDepositer := mload(add(add(metadata, 32), depositerOffset))\n            }\n            // metadataDepositer contains 0xdepositerAddressdepositerAddressdeposite************************\n            // Shift it 12 bytes right:   0x000000000000000000000000depositerAddressdepositerAddressdeposite\n            require(depositer == address(metadataDepositer >> 96), 'incorrect depositer in the data');\n        }\n\n        require(_contractWhitelist[contractAddress], \"provided contractAddress is not whitelisted\");\n\n        bytes4 sig = _contractAddressToDepositFunctionSignature[contractAddress];\n        if (sig != bytes4(0)) {\n            bytes memory callData = abi.encodePacked(sig, metadata);\n            (bool success, bytes memory handlerResponse) = contractAddress.call(callData);\n            require(success, \"call to contractAddress failed\");\n            return handlerResponse;\n        }\n    }\n\n    /**\n        @notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n        @param data Consists of {resourceID}, {lenMetaData}, and {metaData}.\n        @notice Data passed into the function should be constructed as follows:\n        len(data)                              uint256     bytes  0  - 32\n        data                                   bytes       bytes  32 - END\n        @notice {contractAddress} is required to be whitelisted\n        @notice If {_contractAddressToExecuteFunctionSignature}[{contractAddress}] is set,\n        {metaData} is expected to consist of needed function arguments.\n     */\n    function executeProposal(bytes32 resourceID, bytes calldata data) external onlyBridge {\n        uint256      lenMetadata;\n        bytes memory metaData;\n\n        lenMetadata = abi.decode(data, (uint256));\n        metaData = bytes(data[32:32 + lenMetadata]);\n\n        address contractAddress = _resourceIDToContractAddress[resourceID];\n        require(_contractWhitelist[contractAddress], \"provided contractAddress is not whitelisted\");\n\n        bytes4 sig = _contractAddressToExecuteFunctionSignature[contractAddress];\n        if (sig != bytes4(0)) {\n            bytes memory callData = abi.encodePacked(sig, metaData);\n            (bool success,) = contractAddress.call(callData);\n            require(success, \"delegatecall to contractAddress failed\");\n        }\n    }\n\n    function _setResource(\n        bytes32 resourceID,\n        address contractAddress,\n        bytes4 depositFunctionSig,\n        uint256 depositFunctionDepositerOffset,\n        bytes4 executeFunctionSig\n    ) internal {\n        _resourceIDToContractAddress[resourceID] = contractAddress;\n        _contractAddressToResourceID[contractAddress] = resourceID;\n        _contractAddressToDepositFunctionSignature[contractAddress] = depositFunctionSig;\n        _contractAddressToDepositFunctionDepositerOffset[contractAddress] = depositFunctionDepositerOffset;\n        _contractAddressToExecuteFunctionSignature[contractAddress] = executeFunctionSig;\n\n        _contractWhitelist[contractAddress] = true;\n    }\n}\n",
  "sourcePath": "/home/sigo/w/deer/ethsub/packages/sol/contracts/handlers/GenericHandler.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/GenericHandler.sol",
    "exportedSymbols": {
      "GenericHandler": [
        9644
      ]
    },
    "id": 9645,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9299,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "42:23:47"
      },
      {
        "id": 9300,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:47"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IGenericHandler.sol",
        "file": "../interfaces/IGenericHandler.sol",
        "id": 9301,
        "nodeType": "ImportDirective",
        "scope": 9645,
        "sourceUnit": 9859,
        "src": "101:43:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9303,
              "name": "IGenericHandler",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9858,
              "src": "347:15:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IGenericHandler_$9858",
                "typeString": "contract IGenericHandler"
              }
            },
            "id": 9304,
            "nodeType": "InheritanceSpecifier",
            "src": "347:15:47"
          }
        ],
        "contractDependencies": [
          9858
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 9302,
          "nodeType": "StructuredDocumentation",
          "src": "146:173:47",
          "text": "@title Handles generic deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 9644,
        "linearizedBaseContracts": [
          9644,
          9858
        ],
        "name": "GenericHandler",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "318c136e",
            "id": 9306,
            "mutability": "immutable",
            "name": "_bridgeAddress",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9644,
            "src": "369:39:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 9305,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "369:7:47",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "c54c2a11",
            "id": 9310,
            "mutability": "mutable",
            "name": "_resourceIDToContractAddress",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9644,
            "src": "453:64:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
              "typeString": "mapping(bytes32 => address)"
            },
            "typeName": {
              "id": 9309,
              "keyType": {
                "id": 9307,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "462:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "453:28:47",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                "typeString": "mapping(bytes32 => address)"
              },
              "valueType": {
                "id": 9308,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "473:7:47",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ec97d3b4",
            "id": 9314,
            "mutability": "mutable",
            "name": "_contractAddressToResourceID",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9644,
            "src": "562:64:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
              "typeString": "mapping(address => bytes32)"
            },
            "typeName": {
              "id": 9313,
              "keyType": {
                "id": 9311,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "571:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "562:28:47",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                "typeString": "mapping(address => bytes32)"
              },
              "valueType": {
                "id": 9312,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "582:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "cb624463",
            "id": 9318,
            "mutability": "mutable",
            "name": "_contractAddressToDepositFunctionSignature",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9644,
            "src": "687:77:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
              "typeString": "mapping(address => bytes4)"
            },
            "typeName": {
              "id": 9317,
              "keyType": {
                "id": 9315,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "696:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "687:27:47",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
                "typeString": "mapping(address => bytes4)"
              },
              "valueType": {
                "id": 9316,
                "name": "bytes4",
                "nodeType": "ElementaryTypeName",
                "src": "707:6:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "aa50800b",
            "id": 9322,
            "mutability": "mutable",
            "name": "_contractAddressToDepositFunctionDepositerOffset",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9644,
            "src": "848:84:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 9321,
              "keyType": {
                "id": 9319,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "857:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "848:28:47",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 9320,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "868:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "a5c3a985",
            "id": 9326,
            "mutability": "mutable",
            "name": "_contractAddressToExecuteFunctionSignature",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9644,
            "src": "1002:77:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
              "typeString": "mapping(address => bytes4)"
            },
            "typeName": {
              "id": 9325,
              "keyType": {
                "id": 9323,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1011:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1002:27:47",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
                "typeString": "mapping(address => bytes4)"
              },
              "valueType": {
                "id": 9324,
                "name": "bytes4",
                "nodeType": "ElementaryTypeName",
                "src": "1022:6:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7f79bea8",
            "id": 9330,
            "mutability": "mutable",
            "name": "_contractWhitelist",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9644,
            "src": "1134:51:47",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 9329,
              "keyType": {
                "id": 9327,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1143:7:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1134:25:47",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 9328,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1154:4:47",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9336,
              "nodeType": "Block",
              "src": "1214:41:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9332,
                      "name": "_onlyBridge",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9349,
                      "src": "1224:11:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 9333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1224:13:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9334,
                  "nodeType": "ExpressionStatement",
                  "src": "1224:13:47"
                },
                {
                  "id": 9335,
                  "nodeType": "PlaceholderStatement",
                  "src": "1247:1:47"
                }
              ]
            },
            "documentation": null,
            "id": 9337,
            "name": "onlyBridge",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9331,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1211:2:47"
            },
            "src": "1192:63:47",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9348,
              "nodeType": "Block",
              "src": "1297:88:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 9344,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 9341,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1315:3:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 9342,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1315:10:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9343,
                          "name": "_bridgeAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9306,
                          "src": "1329:14:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1315:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73656e646572206d7573742062652062726964676520636f6e7472616374",
                        "id": 9345,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1345:32:47",
                        "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": 9340,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1307:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1307:71:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9347,
                  "nodeType": "ExpressionStatement",
                  "src": "1307:71:47"
                }
              ]
            },
            "documentation": null,
            "id": 9349,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_onlyBridge",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9338,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1281:2:47"
            },
            "returnParameters": {
              "id": 9339,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1297:0:47"
            },
            "scope": 9644,
            "src": "1261:124:47",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9359,
              "nodeType": "Block",
              "src": "1549:47:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9355,
                      "name": "_bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9306,
                      "src": "1559:14:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9356,
                      "name": "bridgeAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9352,
                      "src": "1576:13:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1559:30:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 9358,
                  "nodeType": "ExpressionStatement",
                  "src": "1559:30:47"
                }
              ]
            },
            "documentation": {
              "id": 9350,
              "nodeType": "StructuredDocumentation",
              "src": "1391:88:47",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge."
            },
            "id": 9360,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9352,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9360,
                  "src": "1505:30:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9351,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1505:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1495:46:47"
            },
            "returnParameters": {
              "id": 9354,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1549:0:47"
            },
            "scope": 9644,
            "src": "1484:112:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              9857
            ],
            "body": {
              "id": 9385,
              "nodeType": "Block",
              "src": "3004:131:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9378,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9363,
                        "src": "3028:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9379,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9365,
                        "src": "3040:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9380,
                        "name": "depositFunctionSig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9367,
                        "src": "3057:18:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9381,
                        "name": "depositFunctionDepositerOffset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9369,
                        "src": "3077:30:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9382,
                        "name": "executeFunctionSig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9371,
                        "src": "3109:18:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 9377,
                      "name": "_setResource",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9643,
                      "src": "3015:12:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_bytes4_$_t_uint256_$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes32,address,bytes4,uint256,bytes4)"
                      }
                    },
                    "id": 9383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3015:113:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9384,
                  "nodeType": "ExpressionStatement",
                  "src": "3015:113:47"
                }
              ]
            },
            "documentation": {
              "id": 9361,
              "nodeType": "StructuredDocumentation",
              "src": "1602:1162:47",
              "text": "@notice First verifies {_resourceIDToContractAddress}[{resourceID}] and\n{_contractAddressToResourceID}[{contractAddress}] are not already set,\nthen sets {_resourceIDToContractAddress} with {contractAddress},\n{_contractAddressToResourceID} with {resourceID},\n{_contractAddressToDepositFunctionSignature} with {depositFunctionSig},\n{_contractAddressToDepositFunctionDepositerOffset} with {depositFunctionDepositerOffset},\n{_contractAddressToExecuteFunctionSignature} with {executeFunctionSig},\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.\n@param depositFunctionSig Function signature of method to be called in {contractAddress} when a deposit is made.\n@param depositFunctionDepositerOffset Depositer address position offset in the metadata, in bytes.\n@param executeFunctionSig Function signature of method to be called in {contractAddress} when a deposit is executed."
            },
            "functionSelector": "de319d99",
            "id": 9386,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9374,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9373,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9337,
                  "src": "2984:10:47",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2984:10:47"
              }
            ],
            "name": "setResource",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9375,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2995:8:47"
            },
            "parameters": {
              "id": 9372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9363,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9386,
                  "src": "2799:18:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9362,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2799:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9365,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9386,
                  "src": "2827:23:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2827:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9367,
                  "mutability": "mutable",
                  "name": "depositFunctionSig",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9386,
                  "src": "2860:25:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 9366,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2860:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9369,
                  "mutability": "mutable",
                  "name": "depositFunctionDepositerOffset",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9386,
                  "src": "2895:38:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2895:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9371,
                  "mutability": "mutable",
                  "name": "executeFunctionSig",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9386,
                  "src": "2943:25:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 9370,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2943:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2789:185:47"
            },
            "returnParameters": {
              "id": 9376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3004:0:47"
            },
            "scope": 9644,
            "src": "2769:366:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9506,
              "nodeType": "Block",
              "src": "4182:1445:47",
              "statements": [
                {
                  "assignments": [
                    9401
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9401,
                      "mutability": "mutable",
                      "name": "lenMetadata",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9506,
                      "src": "4192:24:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9400,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4192:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9402,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4192:24:47"
                },
                {
                  "assignments": [
                    9404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9404,
                      "mutability": "mutable",
                      "name": "metadata",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9506,
                      "src": "4226:21:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 9403,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4226:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9405,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4226:21:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9406,
                      "name": "lenMetadata",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9401,
                      "src": "4258:11:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9409,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9393,
                          "src": "4283:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 9411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4290:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9410,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "4290:7:47",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 9412,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4289:9:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9407,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "4272:3:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 9408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4272:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4272:27:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4258:41:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9415,
                  "nodeType": "ExpressionStatement",
                  "src": "4258:41:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9416,
                      "name": "metadata",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9404,
                      "src": "4309:8:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9419,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9393,
                            "src": "4326:4:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9423,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3332",
                              "id": 9421,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4334:2:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 9422,
                              "name": "lenMetadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9401,
                              "src": "4339:11:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4334:16:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "4326:25:47",
                          "startExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 9420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4331:2:47",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 9418,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4320:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 9417,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4320:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4320:32:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "4309:43:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 9427,
                  "nodeType": "ExpressionStatement",
                  "src": "4309:43:47"
                },
                {
                  "assignments": [
                    9429
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9429,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9506,
                      "src": "4363:23:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9428,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4363:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9433,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9430,
                      "name": "_resourceIDToContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9310,
                      "src": "4389:28:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 9432,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9431,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9389,
                      "src": "4418:10:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4389:40:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4363:66:47"
                },
                {
                  "assignments": [
                    9435
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9435,
                      "mutability": "mutable",
                      "name": "depositerOffset",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9506,
                      "src": "4439:23:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9434,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4439:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9439,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9436,
                      "name": "_contractAddressToDepositFunctionDepositerOffset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9322,
                      "src": "4465:48:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 9438,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9437,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9429,
                      "src": "4514:15:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4465:65:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4439:91:47"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9442,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9440,
                      "name": "depositerOffset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9435,
                      "src": "4544:15:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9441,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4562:1:47",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4544:19:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9460,
                  "nodeType": "IfStatement",
                  "src": "4540:594:47",
                  "trueBody": {
                    "id": 9459,
                    "nodeType": "Block",
                    "src": "4565:569:47",
                    "statements": [
                      {
                        "assignments": [
                          9444
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9444,
                            "mutability": "mutable",
                            "name": "metadataDepositer",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 9459,
                            "src": "4579:25:47",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 9443,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4579:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 9445,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4579:25:47"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "4704:99:47",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "4722:67:47",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "metadata",
                                            "nodeType": "YulIdentifier",
                                            "src": "4757:8:47"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "4767:2:47",
                                            "type": "",
                                            "value": "32"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "4753:3:47"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "4753:17:47"
                                      },
                                      {
                                        "name": "depositerOffset",
                                        "nodeType": "YulIdentifier",
                                        "src": "4772:15:47"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "4749:3:47"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "4749:39:47"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "4743:5:47"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4743:46:47"
                              },
                              "variableNames": [
                                {
                                  "name": "metadataDepositer",
                                  "nodeType": "YulIdentifier",
                                  "src": "4722:17:47"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 9435,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4772:15:47",
                            "valueSize": 1
                          },
                          {
                            "declaration": 9404,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4757:8:47",
                            "valueSize": 1
                          },
                          {
                            "declaration": 9444,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4722:17:47",
                            "valueSize": 1
                          }
                        ],
                        "id": 9446,
                        "nodeType": "InlineAssembly",
                        "src": "4695:108:47"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 9455,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 9448,
                                "name": "depositer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9391,
                                "src": "5042:9:47",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 9453,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 9451,
                                      "name": "metadataDepositer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9444,
                                      "src": "5063:17:47",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">>",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "3936",
                                      "id": 9452,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "5084:2:47",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_96_by_1",
                                        "typeString": "int_const 96"
                                      },
                                      "value": "96"
                                    },
                                    "src": "5063:23:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9450,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5055:7:47",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 9449,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5055:7:47",
                                    "typeDescriptions": {
                                      "typeIdentifier": null,
                                      "typeString": null
                                    }
                                  }
                                },
                                "id": 9454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5055:32:47",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "5042:45:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "696e636f7272656374206465706f736974657220696e207468652064617461",
                              "id": 9456,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5089:33:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_af69650095be7884057b91c016755c66f01929adadcaeb1c5a04cab15ae16d45",
                                "typeString": "literal_string \"incorrect depositer in the data\""
                              },
                              "value": "incorrect depositer in the data"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_af69650095be7884057b91c016755c66f01929adadcaeb1c5a04cab15ae16d45",
                                "typeString": "literal_string \"incorrect depositer in the data\""
                              }
                            ],
                            "id": 9447,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5034:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5034:89:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9458,
                        "nodeType": "ExpressionStatement",
                        "src": "5034:89:47"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 9462,
                          "name": "_contractWhitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9330,
                          "src": "5152:18:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 9464,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 9463,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9429,
                          "src": "5171:15:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5152:35:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726f766964656420636f6e747261637441646472657373206973206e6f742077686974656c6973746564",
                        "id": 9465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5189:45:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b35e1d4b1392122547a6ef1db8ad0b6549b5cc8820bfc81437cf78f8b1333b05",
                          "typeString": "literal_string \"provided contractAddress is not whitelisted\""
                        },
                        "value": "provided contractAddress is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b35e1d4b1392122547a6ef1db8ad0b6549b5cc8820bfc81437cf78f8b1333b05",
                          "typeString": "literal_string \"provided contractAddress is not whitelisted\""
                        }
                      ],
                      "id": 9461,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5144:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5144:91:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9467,
                  "nodeType": "ExpressionStatement",
                  "src": "5144:91:47"
                },
                {
                  "assignments": [
                    9469
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9469,
                      "mutability": "mutable",
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9506,
                      "src": "5246:10:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 9468,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "5246:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9473,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9470,
                      "name": "_contractAddressToDepositFunctionSignature",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9318,
                      "src": "5259:42:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
                        "typeString": "mapping(address => bytes4)"
                      }
                    },
                    "id": 9472,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9471,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9429,
                      "src": "5302:15:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5259:59:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5246:72:47"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 9479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9474,
                      "name": "sig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9469,
                      "src": "5332:3:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 9477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5346:1:47",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 9476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5339:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes4_$",
                          "typeString": "type(bytes4)"
                        },
                        "typeName": {
                          "id": 9475,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "5339:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9478,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5339:9:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "5332:16:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9505,
                  "nodeType": "IfStatement",
                  "src": "5328:293:47",
                  "trueBody": {
                    "id": 9504,
                    "nodeType": "Block",
                    "src": "5350:271:47",
                    "statements": [
                      {
                        "assignments": [
                          9481
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9481,
                            "mutability": "mutable",
                            "name": "callData",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 9504,
                            "src": "5364:21:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 9480,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5364:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 9487,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9484,
                              "name": "sig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9469,
                              "src": "5405:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9485,
                              "name": "metadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9404,
                              "src": "5410:8:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 9482,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "5388:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 9483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5388:16:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 9486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5388:31:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5364:55:47"
                      },
                      {
                        "assignments": [
                          9489,
                          9491
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9489,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 9504,
                            "src": "5434:12:47",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 9488,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5434:4:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 9491,
                            "mutability": "mutable",
                            "name": "handlerResponse",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 9504,
                            "src": "5448:28:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 9490,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "5448:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 9496,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9494,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9481,
                              "src": "5501:8:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 9492,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9429,
                              "src": "5480:15:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 9493,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5480:20:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 9495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5480:30:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5433:77:47"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9498,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9489,
                              "src": "5532:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "63616c6c20746f20636f6e747261637441646472657373206661696c6564",
                              "id": 9499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5541:32:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_b71820af6684e0563eeb5f1c18df894bea2ddef7a704be4abdae2a6e7db98e85",
                                "typeString": "literal_string \"call to contractAddress failed\""
                              },
                              "value": "call to contractAddress failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_b71820af6684e0563eeb5f1c18df894bea2ddef7a704be4abdae2a6e7db98e85",
                                "typeString": "literal_string \"call to contractAddress failed\""
                              }
                            ],
                            "id": 9497,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "5524:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5524:50:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9501,
                        "nodeType": "ExpressionStatement",
                        "src": "5524:50:47"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 9502,
                          "name": "handlerResponse",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9491,
                          "src": "5595:15:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 9399,
                        "id": 9503,
                        "nodeType": "Return",
                        "src": "5588:22:47"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 9387,
              "nodeType": "StructuredDocumentation",
              "src": "3141:916:47",
              "text": "@notice A deposit is initiatied by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of contract to be used for deposit.\n@param depositer Address of the account making deposit in the Bridge contract.\n@param data Consists of: {resourceID}, {lenMetaData}, and {metaData} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\nlen(data)                              uint256     bytes  0  - 32\ndata                                   bytes       bytes  64 - END\n@notice {contractAddress} is required to be whitelisted\n@notice If {_contractAddressToDepositFunctionSignature}[{contractAddress}] is set,\n{metaData} is expected to consist of needed function arguments.\n@return Returns the raw bytes returned from the call to {contractAddress}."
            },
            "functionSelector": "b07e54bb",
            "id": 9507,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9396,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9395,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9337,
                  "src": "4148:10:47",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4148:10:47"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9389,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9507,
                  "src": "4079:18:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9388,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4079:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9391,
                  "mutability": "mutable",
                  "name": "depositer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9507,
                  "src": "4099:17:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9390,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4099:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9393,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9507,
                  "src": "4118:19:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9392,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4118:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4078:60:47"
            },
            "returnParameters": {
              "id": 9399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9398,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9507,
                  "src": "4168:12:47",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9397,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4168:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4167:14:47"
            },
            "scope": 9644,
            "src": "4062:1565:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9592,
              "nodeType": "Block",
              "src": "6376:683:47",
              "statements": [
                {
                  "assignments": [
                    9518
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9518,
                      "mutability": "mutable",
                      "name": "lenMetadata",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9592,
                      "src": "6386:24:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9517,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6386:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9519,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6386:24:47"
                },
                {
                  "assignments": [
                    9521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9521,
                      "mutability": "mutable",
                      "name": "metaData",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9592,
                      "src": "6420:21:47",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 9520,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6420:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9522,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6420:21:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9523,
                      "name": "lenMetadata",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9518,
                      "src": "6452:11:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9526,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9512,
                          "src": "6477:4:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 9528,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6484:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9527,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6484:7:47",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            }
                          ],
                          "id": 9529,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6483:9:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9524,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -1,
                          "src": "6466:3:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 9525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6466:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 9530,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6466:27:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6452:41:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9532,
                  "nodeType": "ExpressionStatement",
                  "src": "6452:41:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9533,
                      "name": "metaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9521,
                      "src": "6503:8:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9536,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9512,
                            "src": "6520:4:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 9540,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "3332",
                              "id": 9538,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6528:2:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 9539,
                              "name": "lenMetadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9518,
                              "src": "6533:11:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6528:16:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "6520:25:47",
                          "startExpression": {
                            "argumentTypes": null,
                            "hexValue": "3332",
                            "id": 9537,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6525:2:47",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 9535,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6514:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 9534,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6514:5:47",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9542,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6514:32:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "6503:43:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 9544,
                  "nodeType": "ExpressionStatement",
                  "src": "6503:43:47"
                },
                {
                  "assignments": [
                    9546
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9546,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9592,
                      "src": "6557:23:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9545,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6557:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9550,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9547,
                      "name": "_resourceIDToContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9310,
                      "src": "6583:28:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 9549,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9548,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9510,
                      "src": "6612:10:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6583:40:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6557:66:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 9552,
                          "name": "_contractWhitelist",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9330,
                          "src": "6641:18:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 9554,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 9553,
                          "name": "contractAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9546,
                          "src": "6660:15:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6641:35:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "70726f766964656420636f6e747261637441646472657373206973206e6f742077686974656c6973746564",
                        "id": 9555,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6678:45:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b35e1d4b1392122547a6ef1db8ad0b6549b5cc8820bfc81437cf78f8b1333b05",
                          "typeString": "literal_string \"provided contractAddress is not whitelisted\""
                        },
                        "value": "provided contractAddress is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b35e1d4b1392122547a6ef1db8ad0b6549b5cc8820bfc81437cf78f8b1333b05",
                          "typeString": "literal_string \"provided contractAddress is not whitelisted\""
                        }
                      ],
                      "id": 9551,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6633:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6633:91:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9557,
                  "nodeType": "ExpressionStatement",
                  "src": "6633:91:47"
                },
                {
                  "assignments": [
                    9559
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9559,
                      "mutability": "mutable",
                      "name": "sig",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9592,
                      "src": "6735:10:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 9558,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "6735:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9563,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9560,
                      "name": "_contractAddressToExecuteFunctionSignature",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9326,
                      "src": "6748:42:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
                        "typeString": "mapping(address => bytes4)"
                      }
                    },
                    "id": 9562,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9561,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9546,
                      "src": "6791:15:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6748:59:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6735:72:47"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    },
                    "id": 9569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9564,
                      "name": "sig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9559,
                      "src": "6821:3:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 9567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6835:1:47",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 9566,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "6828:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes4_$",
                          "typeString": "type(bytes4)"
                        },
                        "typeName": {
                          "id": 9565,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "6828:6:47",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6828:9:47",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "6821:16:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9591,
                  "nodeType": "IfStatement",
                  "src": "6817:236:47",
                  "trueBody": {
                    "id": 9590,
                    "nodeType": "Block",
                    "src": "6839:214:47",
                    "statements": [
                      {
                        "assignments": [
                          9571
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9571,
                            "mutability": "mutable",
                            "name": "callData",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 9590,
                            "src": "6853:21:47",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 9570,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6853:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 9577,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9574,
                              "name": "sig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9559,
                              "src": "6894:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 9575,
                              "name": "metaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9521,
                              "src": "6899:8:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 9572,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "6877:3:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 9573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6877:16:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 9576,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6877:31:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6853:55:47"
                      },
                      {
                        "assignments": [
                          9579,
                          null
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9579,
                            "mutability": "mutable",
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 9590,
                            "src": "6923:12:47",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 9578,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "6923:4:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 9584,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9582,
                              "name": "callData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9571,
                              "src": "6961:8:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 9580,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9546,
                              "src": "6940:15:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 9581,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "call",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "6940:20:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 9583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6940:30:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6922:48:47"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9586,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9579,
                              "src": "6992:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "64656c656761746563616c6c20746f20636f6e747261637441646472657373206661696c6564",
                              "id": 9587,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7001:40:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_51f8dc53a1a1265d7e1a33da60330d21af9ee076b3a370b08330721ff4064ac2",
                                "typeString": "literal_string \"delegatecall to contractAddress failed\""
                              },
                              "value": "delegatecall to contractAddress failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_51f8dc53a1a1265d7e1a33da60330d21af9ee076b3a370b08330721ff4064ac2",
                                "typeString": "literal_string \"delegatecall to contractAddress failed\""
                              }
                            ],
                            "id": 9585,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "6984:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 9588,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6984:58:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9589,
                        "nodeType": "ExpressionStatement",
                        "src": "6984:58:47"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 9508,
              "nodeType": "StructuredDocumentation",
              "src": "5633:652:47",
              "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n@param data Consists of {resourceID}, {lenMetaData}, and {metaData}.\n@notice Data passed into the function should be constructed as follows:\nlen(data)                              uint256     bytes  0  - 32\ndata                                   bytes       bytes  32 - END\n@notice {contractAddress} is required to be whitelisted\n@notice If {_contractAddressToExecuteFunctionSignature}[{contractAddress}] is set,\n{metaData} is expected to consist of needed function arguments."
            },
            "functionSelector": "e248cff2",
            "id": 9593,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9515,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9514,
                  "name": "onlyBridge",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9337,
                  "src": "6365:10:47",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6365:10:47"
              }
            ],
            "name": "executeProposal",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9510,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9593,
                  "src": "6315:18:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9509,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6315:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9512,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9593,
                  "src": "6335:19:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 9511,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6335:5:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6314:41:47"
            },
            "returnParameters": {
              "id": 9516,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6376:0:47"
            },
            "scope": 9644,
            "src": "6290:769:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9642,
              "nodeType": "Block",
              "src": "7281:484:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9606,
                        "name": "_resourceIDToContractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9310,
                        "src": "7291:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                          "typeString": "mapping(bytes32 => address)"
                        }
                      },
                      "id": 9608,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9607,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9595,
                        "src": "7320:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7291:40:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9609,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9597,
                      "src": "7334:15:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7291:58:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 9611,
                  "nodeType": "ExpressionStatement",
                  "src": "7291:58:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9612,
                        "name": "_contractAddressToResourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9314,
                        "src": "7359:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes32_$",
                          "typeString": "mapping(address => bytes32)"
                        }
                      },
                      "id": 9614,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9613,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9597,
                        "src": "7388:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7359:45:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9615,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9595,
                      "src": "7407:10:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "7359:58:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 9617,
                  "nodeType": "ExpressionStatement",
                  "src": "7359:58:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9622,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9618,
                        "name": "_contractAddressToDepositFunctionSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9318,
                        "src": "7427:42:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
                          "typeString": "mapping(address => bytes4)"
                        }
                      },
                      "id": 9620,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9619,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9597,
                        "src": "7470:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7427:59:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9621,
                      "name": "depositFunctionSig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9599,
                      "src": "7489:18:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "7427:80:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 9623,
                  "nodeType": "ExpressionStatement",
                  "src": "7427:80:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9624,
                        "name": "_contractAddressToDepositFunctionDepositerOffset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9322,
                        "src": "7517:48:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 9626,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9625,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9597,
                        "src": "7566:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7517:65:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9627,
                      "name": "depositFunctionDepositerOffset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9601,
                      "src": "7585:30:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7517:98:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9629,
                  "nodeType": "ExpressionStatement",
                  "src": "7517:98:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9630,
                        "name": "_contractAddressToExecuteFunctionSignature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9326,
                        "src": "7625:42:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bytes4_$",
                          "typeString": "mapping(address => bytes4)"
                        }
                      },
                      "id": 9632,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9631,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9597,
                        "src": "7668:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7625:59:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9633,
                      "name": "executeFunctionSig",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9603,
                      "src": "7687:18:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      }
                    },
                    "src": "7625:80:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "id": 9635,
                  "nodeType": "ExpressionStatement",
                  "src": "7625:80:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9640,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9636,
                        "name": "_contractWhitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9330,
                        "src": "7716:18:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 9638,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9637,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9597,
                        "src": "7735:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7716:35:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 9639,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7754:4:47",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "7716:42:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9641,
                  "nodeType": "ExpressionStatement",
                  "src": "7716:42:47"
                }
              ]
            },
            "documentation": null,
            "id": 9643,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setResource",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9604,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9595,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9643,
                  "src": "7096:18:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9594,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7096:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9597,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9643,
                  "src": "7124:23:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7124:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9599,
                  "mutability": "mutable",
                  "name": "depositFunctionSig",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9643,
                  "src": "7157:25:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 9598,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "7157:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9601,
                  "mutability": "mutable",
                  "name": "depositFunctionDepositerOffset",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9643,
                  "src": "7192:38:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9600,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7192:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9603,
                  "mutability": "mutable",
                  "name": "executeFunctionSig",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9643,
                  "src": "7240:25:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 9602,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "7240:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7086:185:47"
            },
            "returnParameters": {
              "id": 9605,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7281:0:47"
            },
            "scope": 9644,
            "src": "7065:700:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 9645,
        "src": "320:7447:47"
      }
    ],
    "src": "42:7726:47"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "project:/contracts/handlers/GenericHandler.sol",
      "exportedSymbols": {
        "GenericHandler": [
          9644
        ]
      },
      "license": "LGPL-3.0-only"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.6",
            ".12"
          ]
        },
        "id": 9299,
        "name": "PragmaDirective",
        "src": "42:23:47"
      },
      {
        "attributes": {
          "literals": [
            "experimental",
            "ABIEncoderV2"
          ]
        },
        "id": 9300,
        "name": "PragmaDirective",
        "src": "66:33:47"
      },
      {
        "attributes": {
          "SourceUnit": 9859,
          "absolutePath": "project:/contracts/interfaces/IGenericHandler.sol",
          "file": "../interfaces/IGenericHandler.sol",
          "scope": 9645,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 9301,
        "name": "ImportDirective",
        "src": "101:43:47"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            9858
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            9644,
            9858
          ],
          "name": "GenericHandler",
          "scope": 9645
        },
        "children": [
          {
            "attributes": {
              "text": "@title Handles generic deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
            },
            "id": 9302,
            "name": "StructuredDocumentation",
            "src": "146:173:47"
          },
          {
            "attributes": {
              "arguments": null
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "IGenericHandler",
                  "referencedDeclaration": 9858,
                  "type": "contract IGenericHandler"
                },
                "id": 9303,
                "name": "UserDefinedTypeName",
                "src": "347:15:47"
              }
            ],
            "id": 9304,
            "name": "InheritanceSpecifier",
            "src": "347:15:47"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "318c136e",
              "mutability": "immutable",
              "name": "_bridgeAddress",
              "overrides": null,
              "scope": 9644,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 9305,
                "name": "ElementaryTypeName",
                "src": "369:7:47"
              }
            ],
            "id": 9306,
            "name": "VariableDeclaration",
            "src": "369:39:47"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "c54c2a11",
              "mutability": "mutable",
              "name": "_resourceIDToContractAddress",
              "overrides": null,
              "scope": 9644,
              "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": 9307,
                    "name": "ElementaryTypeName",
                    "src": "462:7:47"
                  },
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 9308,
                    "name": "ElementaryTypeName",
                    "src": "473:7:47"
                  }
                ],
                "id": 9309,
                "name": "Mapping",
                "src": "453:28:47"
              }
            ],
            "id": 9310,
            "name": "VariableDeclaration",
            "src": "453:64:47"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "ec97d3b4",
              "mutability": "mutable",
              "name": "_contractAddressToResourceID",
              "overrides": null,
              "scope": 9644,
              "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": 9311,
                    "name": "ElementaryTypeName",
                    "src": "571:7:47"
                  },
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 9312,
                    "name": "ElementaryTypeName",
                    "src": "582:7:47"
                  }
                ],
                "id": 9313,
                "name": "Mapping",
                "src": "562:28:47"
              }
            ],
            "id": 9314,
            "name": "VariableDeclaration",
            "src": "562:64:47"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "cb624463",
              "mutability": "mutable",
              "name": "_contractAddressToDepositFunctionSignature",
              "overrides": null,
              "scope": 9644,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => bytes4)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => bytes4)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 9315,
                    "name": "ElementaryTypeName",
                    "src": "696:7:47"
                  },
                  {
                    "attributes": {
                      "name": "bytes4",
                      "type": "bytes4"
                    },
                    "id": 9316,
                    "name": "ElementaryTypeName",
                    "src": "707:6:47"
                  }
                ],
                "id": 9317,
                "name": "Mapping",
                "src": "687:27:47"
              }
            ],
            "id": 9318,
            "name": "VariableDeclaration",
            "src": "687:77:47"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "aa50800b",
              "mutability": "mutable",
              "name": "_contractAddressToDepositFunctionDepositerOffset",
              "overrides": null,
              "scope": 9644,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => uint256)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => uint256)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 9319,
                    "name": "ElementaryTypeName",
                    "src": "857:7:47"
                  },
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 9320,
                    "name": "ElementaryTypeName",
                    "src": "868:7:47"
                  }
                ],
                "id": 9321,
                "name": "Mapping",
                "src": "848:28:47"
              }
            ],
            "id": 9322,
            "name": "VariableDeclaration",
            "src": "848:84:47"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "a5c3a985",
              "mutability": "mutable",
              "name": "_contractAddressToExecuteFunctionSignature",
              "overrides": null,
              "scope": 9644,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => bytes4)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => bytes4)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 9323,
                    "name": "ElementaryTypeName",
                    "src": "1011:7:47"
                  },
                  {
                    "attributes": {
                      "name": "bytes4",
                      "type": "bytes4"
                    },
                    "id": 9324,
                    "name": "ElementaryTypeName",
                    "src": "1022:6:47"
                  }
                ],
                "id": 9325,
                "name": "Mapping",
                "src": "1002:27:47"
              }
            ],
            "id": 9326,
            "name": "VariableDeclaration",
            "src": "1002:77:47"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "7f79bea8",
              "mutability": "mutable",
              "name": "_contractWhitelist",
              "overrides": null,
              "scope": 9644,
              "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": 9327,
                    "name": "ElementaryTypeName",
                    "src": "1143:7:47"
                  },
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 9328,
                    "name": "ElementaryTypeName",
                    "src": "1154:4:47"
                  }
                ],
                "id": 9329,
                "name": "Mapping",
                "src": "1134:25:47"
              }
            ],
            "id": 9330,
            "name": "VariableDeclaration",
            "src": "1134:51:47"
          },
          {
            "attributes": {
              "documentation": null,
              "name": "onlyBridge",
              "overrides": null,
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9331,
                "name": "ParameterList",
                "src": "1211:2:47"
              },
              {
                "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": 9349,
                              "type": "function () view",
                              "value": "_onlyBridge"
                            },
                            "id": 9332,
                            "name": "Identifier",
                            "src": "1224:11:47"
                          }
                        ],
                        "id": 9333,
                        "name": "FunctionCall",
                        "src": "1224:13:47"
                      }
                    ],
                    "id": 9334,
                    "name": "ExpressionStatement",
                    "src": "1224:13:47"
                  },
                  {
                    "id": 9335,
                    "name": "PlaceholderStatement",
                    "src": "1247:1:47"
                  }
                ],
                "id": 9336,
                "name": "Block",
                "src": "1214:41:47"
              }
            ],
            "id": 9337,
            "name": "ModifierDefinition",
            "src": "1192:63:47"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_onlyBridge",
              "overrides": null,
              "scope": 9644,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9338,
                "name": "ParameterList",
                "src": "1281:2:47"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9339,
                "name": "ParameterList",
                "src": "1297:0:47"
              },
              {
                "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": 9340,
                            "name": "Identifier",
                            "src": "1307:7:47"
                          },
                          {
                            "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": 9341,
                                    "name": "Identifier",
                                    "src": "1315:3:47"
                                  }
                                ],
                                "id": 9342,
                                "name": "MemberAccess",
                                "src": "1315:10:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9306,
                                  "type": "address",
                                  "value": "_bridgeAddress"
                                },
                                "id": 9343,
                                "name": "Identifier",
                                "src": "1329:14:47"
                              }
                            ],
                            "id": 9344,
                            "name": "BinaryOperation",
                            "src": "1315:28:47"
                          },
                          {
                            "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": 9345,
                            "name": "Literal",
                            "src": "1345:32:47"
                          }
                        ],
                        "id": 9346,
                        "name": "FunctionCall",
                        "src": "1307:71:47"
                      }
                    ],
                    "id": 9347,
                    "name": "ExpressionStatement",
                    "src": "1307:71:47"
                  }
                ],
                "id": 9348,
                "name": "Block",
                "src": "1297:88:47"
              }
            ],
            "id": 9349,
            "name": "FunctionDefinition",
            "src": "1261:124:47"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "overrides": null,
              "scope": 9644,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "@param bridgeAddress Contract address of previously deployed Bridge."
                },
                "id": 9350,
                "name": "StructuredDocumentation",
                "src": "1391:88:47"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "bridgeAddress",
                      "overrides": null,
                      "scope": 9360,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9351,
                        "name": "ElementaryTypeName",
                        "src": "1505:7:47"
                      }
                    ],
                    "id": 9352,
                    "name": "VariableDeclaration",
                    "src": "1505:30:47"
                  }
                ],
                "id": 9353,
                "name": "ParameterList",
                "src": "1495:46:47"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9354,
                "name": "ParameterList",
                "src": "1549:0:47"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9306,
                              "type": "address",
                              "value": "_bridgeAddress"
                            },
                            "id": 9355,
                            "name": "Identifier",
                            "src": "1559:14:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9352,
                              "type": "address",
                              "value": "bridgeAddress"
                            },
                            "id": 9356,
                            "name": "Identifier",
                            "src": "1576:13:47"
                          }
                        ],
                        "id": 9357,
                        "name": "Assignment",
                        "src": "1559:30:47"
                      }
                    ],
                    "id": 9358,
                    "name": "ExpressionStatement",
                    "src": "1559:30:47"
                  }
                ],
                "id": 9359,
                "name": "Block",
                "src": "1549:47:47"
              }
            ],
            "id": 9360,
            "name": "FunctionDefinition",
            "src": "1484:112:47"
          },
          {
            "attributes": {
              "baseFunctions": [
                9857
              ],
              "functionSelector": "de319d99",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setResource",
              "scope": 9644,
              "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},\n{_contractAddressToDepositFunctionSignature} with {depositFunctionSig},\n{_contractAddressToDepositFunctionDepositerOffset} with {depositFunctionDepositerOffset},\n{_contractAddressToExecuteFunctionSignature} with {executeFunctionSig},\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.\n@param depositFunctionSig Function signature of method to be called in {contractAddress} when a deposit is made.\n@param depositFunctionDepositerOffset Depositer address position offset in the metadata, in bytes.\n@param executeFunctionSig Function signature of method to be called in {contractAddress} when a deposit is executed."
                },
                "id": 9361,
                "name": "StructuredDocumentation",
                "src": "1602:1162:47"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 9375,
                "name": "OverrideSpecifier",
                "src": "2995:8:47"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9386,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9362,
                        "name": "ElementaryTypeName",
                        "src": "2799:7:47"
                      }
                    ],
                    "id": 9363,
                    "name": "VariableDeclaration",
                    "src": "2799:18:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "overrides": null,
                      "scope": 9386,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9364,
                        "name": "ElementaryTypeName",
                        "src": "2827:7:47"
                      }
                    ],
                    "id": 9365,
                    "name": "VariableDeclaration",
                    "src": "2827:23:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "depositFunctionSig",
                      "overrides": null,
                      "scope": 9386,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 9366,
                        "name": "ElementaryTypeName",
                        "src": "2860:6:47"
                      }
                    ],
                    "id": 9367,
                    "name": "VariableDeclaration",
                    "src": "2860:25:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "depositFunctionDepositerOffset",
                      "overrides": null,
                      "scope": 9386,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 9368,
                        "name": "ElementaryTypeName",
                        "src": "2895:7:47"
                      }
                    ],
                    "id": 9369,
                    "name": "VariableDeclaration",
                    "src": "2895:38:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "executeFunctionSig",
                      "overrides": null,
                      "scope": 9386,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 9370,
                        "name": "ElementaryTypeName",
                        "src": "2943:6:47"
                      }
                    ],
                    "id": 9371,
                    "name": "VariableDeclaration",
                    "src": "2943:25:47"
                  }
                ],
                "id": 9372,
                "name": "ParameterList",
                "src": "2789:185:47"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9376,
                "name": "ParameterList",
                "src": "3004:0:47"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9337,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9373,
                    "name": "Identifier",
                    "src": "2984:10:47"
                  }
                ],
                "id": 9374,
                "name": "ModifierInvocation",
                "src": "2984:10:47"
              },
              {
                "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"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9643,
                              "type": "function (bytes32,address,bytes4,uint256,bytes4)",
                              "value": "_setResource"
                            },
                            "id": 9377,
                            "name": "Identifier",
                            "src": "3015:12:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9363,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9378,
                            "name": "Identifier",
                            "src": "3028:10:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9365,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9379,
                            "name": "Identifier",
                            "src": "3040:15:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9367,
                              "type": "bytes4",
                              "value": "depositFunctionSig"
                            },
                            "id": 9380,
                            "name": "Identifier",
                            "src": "3057:18:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9369,
                              "type": "uint256",
                              "value": "depositFunctionDepositerOffset"
                            },
                            "id": 9381,
                            "name": "Identifier",
                            "src": "3077:30:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9371,
                              "type": "bytes4",
                              "value": "executeFunctionSig"
                            },
                            "id": 9382,
                            "name": "Identifier",
                            "src": "3109:18:47"
                          }
                        ],
                        "id": 9383,
                        "name": "FunctionCall",
                        "src": "3015:113:47"
                      }
                    ],
                    "id": 9384,
                    "name": "ExpressionStatement",
                    "src": "3015:113:47"
                  }
                ],
                "id": 9385,
                "name": "Block",
                "src": "3004:131:47"
              }
            ],
            "id": 9386,
            "name": "FunctionDefinition",
            "src": "2769:366:47"
          },
          {
            "attributes": {
              "functionSelector": "b07e54bb",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "deposit",
              "overrides": null,
              "scope": 9644,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice A deposit is initiatied by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of contract to be used for deposit.\n@param depositer Address of the account making deposit in the Bridge contract.\n@param data Consists of: {resourceID}, {lenMetaData}, and {metaData} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\nlen(data)                              uint256     bytes  0  - 32\ndata                                   bytes       bytes  64 - END\n@notice {contractAddress} is required to be whitelisted\n@notice If {_contractAddressToDepositFunctionSignature}[{contractAddress}] is set,\n{metaData} is expected to consist of needed function arguments.\n@return Returns the raw bytes returned from the call to {contractAddress}."
                },
                "id": 9387,
                "name": "StructuredDocumentation",
                "src": "3141:916:47"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9507,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9388,
                        "name": "ElementaryTypeName",
                        "src": "4079:7:47"
                      }
                    ],
                    "id": 9389,
                    "name": "VariableDeclaration",
                    "src": "4079:18:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "depositer",
                      "overrides": null,
                      "scope": 9507,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9390,
                        "name": "ElementaryTypeName",
                        "src": "4099:7:47"
                      }
                    ],
                    "id": 9391,
                    "name": "VariableDeclaration",
                    "src": "4099:17:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 9507,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9392,
                        "name": "ElementaryTypeName",
                        "src": "4118:5:47"
                      }
                    ],
                    "id": 9393,
                    "name": "VariableDeclaration",
                    "src": "4118:19:47"
                  }
                ],
                "id": 9394,
                "name": "ParameterList",
                "src": "4078:60:47"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "overrides": null,
                      "scope": 9507,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9397,
                        "name": "ElementaryTypeName",
                        "src": "4168:5:47"
                      }
                    ],
                    "id": 9398,
                    "name": "VariableDeclaration",
                    "src": "4168:12:47"
                  }
                ],
                "id": 9399,
                "name": "ParameterList",
                "src": "4167:14:47"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9337,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9395,
                    "name": "Identifier",
                    "src": "4148:10:47"
                  }
                ],
                "id": 9396,
                "name": "ModifierInvocation",
                "src": "4148:10:47"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        9401
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lenMetadata",
                          "overrides": null,
                          "scope": 9506,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 9400,
                            "name": "ElementaryTypeName",
                            "src": "4192:7:47"
                          }
                        ],
                        "id": 9401,
                        "name": "VariableDeclaration",
                        "src": "4192:24:47"
                      }
                    ],
                    "id": 9402,
                    "name": "VariableDeclarationStatement",
                    "src": "4192:24:47"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9404
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "metadata",
                          "overrides": null,
                          "scope": 9506,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 9403,
                            "name": "ElementaryTypeName",
                            "src": "4226:5:47"
                          }
                        ],
                        "id": 9404,
                        "name": "VariableDeclaration",
                        "src": "4226:21:47"
                      }
                    ],
                    "id": 9405,
                    "name": "VariableDeclarationStatement",
                    "src": "4226:21:47"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9401,
                              "type": "uint256",
                              "value": "lenMetadata"
                            },
                            "id": 9406,
                            "name": "Identifier",
                            "src": "4258:11:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 9407,
                                    "name": "Identifier",
                                    "src": "4272:3:47"
                                  }
                                ],
                                "id": 9408,
                                "name": "MemberAccess",
                                "src": "4272:10:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9393,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 9409,
                                "name": "Identifier",
                                "src": "4283:4:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint256",
                                          "type": null
                                        },
                                        "id": 9410,
                                        "name": "ElementaryTypeName",
                                        "src": "4290:7:47"
                                      }
                                    ],
                                    "id": 9411,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4290:7:47"
                                  }
                                ],
                                "id": 9412,
                                "name": "TupleExpression",
                                "src": "4289:9:47"
                              }
                            ],
                            "id": 9413,
                            "name": "FunctionCall",
                            "src": "4272:27:47"
                          }
                        ],
                        "id": 9414,
                        "name": "Assignment",
                        "src": "4258:41:47"
                      }
                    ],
                    "id": 9415,
                    "name": "ExpressionStatement",
                    "src": "4258:41:47"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9404,
                              "type": "bytes memory",
                              "value": "metadata"
                            },
                            "id": 9416,
                            "name": "Identifier",
                            "src": "4309:8:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes calldata",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                      "typeString": "bytes calldata slice"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes storage pointer)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": null
                                    },
                                    "id": 9417,
                                    "name": "ElementaryTypeName",
                                    "src": "4320:5:47"
                                  }
                                ],
                                "id": 9418,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4320:5:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata slice"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9393,
                                      "type": "bytes calldata",
                                      "value": "data"
                                    },
                                    "id": 9419,
                                    "name": "Identifier",
                                    "src": "4326:4:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 9420,
                                    "name": "Literal",
                                    "src": "4331:2:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3332",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 32",
                                          "value": "32"
                                        },
                                        "id": 9421,
                                        "name": "Literal",
                                        "src": "4334:2:47"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9401,
                                          "type": "uint256",
                                          "value": "lenMetadata"
                                        },
                                        "id": 9422,
                                        "name": "Identifier",
                                        "src": "4339:11:47"
                                      }
                                    ],
                                    "id": 9423,
                                    "name": "BinaryOperation",
                                    "src": "4334:16:47"
                                  }
                                ],
                                "id": 9424,
                                "name": "IndexRangeAccess",
                                "src": "4326:25:47"
                              }
                            ],
                            "id": 9425,
                            "name": "FunctionCall",
                            "src": "4320:32:47"
                          }
                        ],
                        "id": 9426,
                        "name": "Assignment",
                        "src": "4309:43:47"
                      }
                    ],
                    "id": 9427,
                    "name": "ExpressionStatement",
                    "src": "4309:43:47"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9429
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "contractAddress",
                          "overrides": null,
                          "scope": 9506,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 9428,
                            "name": "ElementaryTypeName",
                            "src": "4363:7:47"
                          }
                        ],
                        "id": 9429,
                        "name": "VariableDeclaration",
                        "src": "4363:23:47"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9310,
                              "type": "mapping(bytes32 => address)",
                              "value": "_resourceIDToContractAddress"
                            },
                            "id": 9430,
                            "name": "Identifier",
                            "src": "4389:28:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9389,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9431,
                            "name": "Identifier",
                            "src": "4418:10:47"
                          }
                        ],
                        "id": 9432,
                        "name": "IndexAccess",
                        "src": "4389:40:47"
                      }
                    ],
                    "id": 9433,
                    "name": "VariableDeclarationStatement",
                    "src": "4363:66:47"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9435
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "depositerOffset",
                          "overrides": null,
                          "scope": 9506,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 9434,
                            "name": "ElementaryTypeName",
                            "src": "4439:7:47"
                          }
                        ],
                        "id": 9435,
                        "name": "VariableDeclaration",
                        "src": "4439:23:47"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9322,
                              "type": "mapping(address => uint256)",
                              "value": "_contractAddressToDepositFunctionDepositerOffset"
                            },
                            "id": 9436,
                            "name": "Identifier",
                            "src": "4465:48:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9429,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9437,
                            "name": "Identifier",
                            "src": "4514:15:47"
                          }
                        ],
                        "id": 9438,
                        "name": "IndexAccess",
                        "src": "4465:65:47"
                      }
                    ],
                    "id": 9439,
                    "name": "VariableDeclarationStatement",
                    "src": "4439:91:47"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9435,
                              "type": "uint256",
                              "value": "depositerOffset"
                            },
                            "id": 9440,
                            "name": "Identifier",
                            "src": "4544:15:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 9441,
                            "name": "Literal",
                            "src": "4562:1:47"
                          }
                        ],
                        "id": 9442,
                        "name": "BinaryOperation",
                        "src": "4544:19:47"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                9444
                              ],
                              "initialValue": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "metadataDepositer",
                                  "overrides": null,
                                  "scope": 9459,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 9443,
                                    "name": "ElementaryTypeName",
                                    "src": "4579:7:47"
                                  }
                                ],
                                "id": 9444,
                                "name": "VariableDeclaration",
                                "src": "4579:25:47"
                              }
                            ],
                            "id": 9445,
                            "name": "VariableDeclarationStatement",
                            "src": "4579:25:47"
                          },
                          {
                            "attributes": {
                              "evmVersion": "istanbul",
                              "externalReferences": [
                                {
                                  "declaration": 9435,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4772:15:47",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 9404,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4757:8:47",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 9444,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "4722:17:47",
                                  "valueSize": 1
                                }
                              ],
                              "operations": "{\n    metadataDepositer := mload(add(add(metadata, 32), depositerOffset))\n}"
                            },
                            "children": [],
                            "id": 9446,
                            "name": "InlineAssembly",
                            "src": "4695:108:47"
                          },
                          {
                            "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_af69650095be7884057b91c016755c66f01929adadcaeb1c5a04cab15ae16d45",
                                          "typeString": "literal_string \"incorrect depositer in the data\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 9447,
                                    "name": "Identifier",
                                    "src": "5034:7:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9391,
                                          "type": "address",
                                          "value": "depositer"
                                        },
                                        "id": 9448,
                                        "name": "Identifier",
                                        "src": "5042:9:47"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "address payable",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(address)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "name": "address",
                                                  "type": null
                                                },
                                                "id": 9449,
                                                "name": "ElementaryTypeName",
                                                "src": "5055:7:47"
                                              }
                                            ],
                                            "id": 9450,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "5055:7:47"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": ">>",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 9444,
                                                  "type": "uint256",
                                                  "value": "metadataDepositer"
                                                },
                                                "id": 9451,
                                                "name": "Identifier",
                                                "src": "5063:17:47"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "3936",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 96",
                                                  "value": "96"
                                                },
                                                "id": 9452,
                                                "name": "Literal",
                                                "src": "5084:2:47"
                                              }
                                            ],
                                            "id": 9453,
                                            "name": "BinaryOperation",
                                            "src": "5063:23:47"
                                          }
                                        ],
                                        "id": 9454,
                                        "name": "FunctionCall",
                                        "src": "5055:32:47"
                                      }
                                    ],
                                    "id": 9455,
                                    "name": "BinaryOperation",
                                    "src": "5042:45:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "696e636f7272656374206465706f736974657220696e207468652064617461",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"incorrect depositer in the data\"",
                                      "value": "incorrect depositer in the data"
                                    },
                                    "id": 9456,
                                    "name": "Literal",
                                    "src": "5089:33:47"
                                  }
                                ],
                                "id": 9457,
                                "name": "FunctionCall",
                                "src": "5034:89:47"
                              }
                            ],
                            "id": 9458,
                            "name": "ExpressionStatement",
                            "src": "5034:89:47"
                          }
                        ],
                        "id": 9459,
                        "name": "Block",
                        "src": "4565:569:47"
                      }
                    ],
                    "id": 9460,
                    "name": "IfStatement",
                    "src": "4540:594:47"
                  },
                  {
                    "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_b35e1d4b1392122547a6ef1db8ad0b6549b5cc8820bfc81437cf78f8b1333b05",
                                  "typeString": "literal_string \"provided contractAddress is not whitelisted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 9461,
                            "name": "Identifier",
                            "src": "5144:7:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9330,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 9462,
                                "name": "Identifier",
                                "src": "5152:18:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9429,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9463,
                                "name": "Identifier",
                                "src": "5171:15:47"
                              }
                            ],
                            "id": 9464,
                            "name": "IndexAccess",
                            "src": "5152:35:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "70726f766964656420636f6e747261637441646472657373206973206e6f742077686974656c6973746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"provided contractAddress is not whitelisted\"",
                              "value": "provided contractAddress is not whitelisted"
                            },
                            "id": 9465,
                            "name": "Literal",
                            "src": "5189:45:47"
                          }
                        ],
                        "id": 9466,
                        "name": "FunctionCall",
                        "src": "5144:91:47"
                      }
                    ],
                    "id": 9467,
                    "name": "ExpressionStatement",
                    "src": "5144:91:47"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9469
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "sig",
                          "overrides": null,
                          "scope": 9506,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes4",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes4",
                              "type": "bytes4"
                            },
                            "id": 9468,
                            "name": "ElementaryTypeName",
                            "src": "5246:6:47"
                          }
                        ],
                        "id": 9469,
                        "name": "VariableDeclaration",
                        "src": "5246:10:47"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bytes4"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9318,
                              "type": "mapping(address => bytes4)",
                              "value": "_contractAddressToDepositFunctionSignature"
                            },
                            "id": 9470,
                            "name": "Identifier",
                            "src": "5259:42:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9429,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9471,
                            "name": "Identifier",
                            "src": "5302:15:47"
                          }
                        ],
                        "id": 9472,
                        "name": "IndexAccess",
                        "src": "5259:59:47"
                      }
                    ],
                    "id": 9473,
                    "name": "VariableDeclarationStatement",
                    "src": "5246:72:47"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9469,
                              "type": "bytes4",
                              "value": "sig"
                            },
                            "id": 9474,
                            "name": "Identifier",
                            "src": "5332:3:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes4",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes4)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes4",
                                      "type": null
                                    },
                                    "id": 9475,
                                    "name": "ElementaryTypeName",
                                    "src": "5339:6:47"
                                  }
                                ],
                                "id": 9476,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5339:6:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 9477,
                                "name": "Literal",
                                "src": "5346:1:47"
                              }
                            ],
                            "id": 9478,
                            "name": "FunctionCall",
                            "src": "5339:9:47"
                          }
                        ],
                        "id": 9479,
                        "name": "BinaryOperation",
                        "src": "5332:16:47"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                9481
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "callData",
                                  "overrides": null,
                                  "scope": 9504,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 9480,
                                    "name": "ElementaryTypeName",
                                    "src": "5364:5:47"
                                  }
                                ],
                                "id": 9481,
                                "name": "VariableDeclaration",
                                "src": "5364:21:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encodePacked",
                                      "referencedDeclaration": null,
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -1,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 9482,
                                        "name": "Identifier",
                                        "src": "5388:3:47"
                                      }
                                    ],
                                    "id": 9483,
                                    "name": "MemberAccess",
                                    "src": "5388:16:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9469,
                                      "type": "bytes4",
                                      "value": "sig"
                                    },
                                    "id": 9484,
                                    "name": "Identifier",
                                    "src": "5405:3:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9404,
                                      "type": "bytes memory",
                                      "value": "metadata"
                                    },
                                    "id": 9485,
                                    "name": "Identifier",
                                    "src": "5410:8:47"
                                  }
                                ],
                                "id": 9486,
                                "name": "FunctionCall",
                                "src": "5388:31:47"
                              }
                            ],
                            "id": 9487,
                            "name": "VariableDeclarationStatement",
                            "src": "5364:55:47"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                9489,
                                9491
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "overrides": null,
                                  "scope": 9504,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "bool",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bool",
                                      "type": "bool"
                                    },
                                    "id": 9488,
                                    "name": "ElementaryTypeName",
                                    "src": "5434:4:47"
                                  }
                                ],
                                "id": 9489,
                                "name": "VariableDeclaration",
                                "src": "5434:12:47"
                              },
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "handlerResponse",
                                  "overrides": null,
                                  "scope": 9504,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 9490,
                                    "name": "ElementaryTypeName",
                                    "src": "5448:5:47"
                                  }
                                ],
                                "id": 9491,
                                "name": "VariableDeclaration",
                                "src": "5448:28:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple(bool,bytes memory)",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "call",
                                      "referencedDeclaration": null,
                                      "type": "function (bytes memory) payable returns (bool,bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9429,
                                          "type": "address",
                                          "value": "contractAddress"
                                        },
                                        "id": 9492,
                                        "name": "Identifier",
                                        "src": "5480:15:47"
                                      }
                                    ],
                                    "id": 9493,
                                    "name": "MemberAccess",
                                    "src": "5480:20:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9481,
                                      "type": "bytes memory",
                                      "value": "callData"
                                    },
                                    "id": 9494,
                                    "name": "Identifier",
                                    "src": "5501:8:47"
                                  }
                                ],
                                "id": 9495,
                                "name": "FunctionCall",
                                "src": "5480:30:47"
                              }
                            ],
                            "id": 9496,
                            "name": "VariableDeclarationStatement",
                            "src": "5433:77:47"
                          },
                          {
                            "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_b71820af6684e0563eeb5f1c18df894bea2ddef7a704be4abdae2a6e7db98e85",
                                          "typeString": "literal_string \"call to contractAddress failed\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 9497,
                                    "name": "Identifier",
                                    "src": "5524:7:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9489,
                                      "type": "bool",
                                      "value": "success"
                                    },
                                    "id": 9498,
                                    "name": "Identifier",
                                    "src": "5532:7:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "63616c6c20746f20636f6e747261637441646472657373206661696c6564",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"call to contractAddress failed\"",
                                      "value": "call to contractAddress failed"
                                    },
                                    "id": 9499,
                                    "name": "Literal",
                                    "src": "5541:32:47"
                                  }
                                ],
                                "id": 9500,
                                "name": "FunctionCall",
                                "src": "5524:50:47"
                              }
                            ],
                            "id": 9501,
                            "name": "ExpressionStatement",
                            "src": "5524:50:47"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 9399
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9491,
                                  "type": "bytes memory",
                                  "value": "handlerResponse"
                                },
                                "id": 9502,
                                "name": "Identifier",
                                "src": "5595:15:47"
                              }
                            ],
                            "id": 9503,
                            "name": "Return",
                            "src": "5588:22:47"
                          }
                        ],
                        "id": 9504,
                        "name": "Block",
                        "src": "5350:271:47"
                      }
                    ],
                    "id": 9505,
                    "name": "IfStatement",
                    "src": "5328:293:47"
                  }
                ],
                "id": 9506,
                "name": "Block",
                "src": "4182:1445:47"
              }
            ],
            "id": 9507,
            "name": "FunctionDefinition",
            "src": "4062:1565:47"
          },
          {
            "attributes": {
              "functionSelector": "e248cff2",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "executeProposal",
              "overrides": null,
              "scope": 9644,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n@param data Consists of {resourceID}, {lenMetaData}, and {metaData}.\n@notice Data passed into the function should be constructed as follows:\nlen(data)                              uint256     bytes  0  - 32\ndata                                   bytes       bytes  32 - END\n@notice {contractAddress} is required to be whitelisted\n@notice If {_contractAddressToExecuteFunctionSignature}[{contractAddress}] is set,\n{metaData} is expected to consist of needed function arguments."
                },
                "id": 9508,
                "name": "StructuredDocumentation",
                "src": "5633:652:47"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9593,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9509,
                        "name": "ElementaryTypeName",
                        "src": "6315:7:47"
                      }
                    ],
                    "id": 9510,
                    "name": "VariableDeclaration",
                    "src": "6315:18:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "data",
                      "overrides": null,
                      "scope": 9593,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 9511,
                        "name": "ElementaryTypeName",
                        "src": "6335:5:47"
                      }
                    ],
                    "id": 9512,
                    "name": "VariableDeclaration",
                    "src": "6335:19:47"
                  }
                ],
                "id": 9513,
                "name": "ParameterList",
                "src": "6314:41:47"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9516,
                "name": "ParameterList",
                "src": "6376:0:47"
              },
              {
                "attributes": {
                  "arguments": null
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 9337,
                      "type": "modifier ()",
                      "value": "onlyBridge"
                    },
                    "id": 9514,
                    "name": "Identifier",
                    "src": "6365:10:47"
                  }
                ],
                "id": 9515,
                "name": "ModifierInvocation",
                "src": "6365:10:47"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        9518
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "lenMetadata",
                          "overrides": null,
                          "scope": 9592,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 9517,
                            "name": "ElementaryTypeName",
                            "src": "6386:7:47"
                          }
                        ],
                        "id": 9518,
                        "name": "VariableDeclaration",
                        "src": "6386:24:47"
                      }
                    ],
                    "id": 9519,
                    "name": "VariableDeclarationStatement",
                    "src": "6386:24:47"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9521
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "metaData",
                          "overrides": null,
                          "scope": 9592,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 9520,
                            "name": "ElementaryTypeName",
                            "src": "6420:5:47"
                          }
                        ],
                        "id": 9521,
                        "name": "VariableDeclaration",
                        "src": "6420:21:47"
                      }
                    ],
                    "id": 9522,
                    "name": "VariableDeclarationStatement",
                    "src": "6420:21:47"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9518,
                              "type": "uint256",
                              "value": "lenMetadata"
                            },
                            "id": 9523,
                            "name": "Identifier",
                            "src": "6452:11:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "decode",
                                  "referencedDeclaration": null,
                                  "type": "function () pure"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -1,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 9524,
                                    "name": "Identifier",
                                    "src": "6466:3:47"
                                  }
                                ],
                                "id": 9525,
                                "name": "MemberAccess",
                                "src": "6466:10:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9512,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 9526,
                                "name": "Identifier",
                                "src": "6477:4:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint256",
                                          "type": null
                                        },
                                        "id": 9527,
                                        "name": "ElementaryTypeName",
                                        "src": "6484:7:47"
                                      }
                                    ],
                                    "id": 9528,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "6484:7:47"
                                  }
                                ],
                                "id": 9529,
                                "name": "TupleExpression",
                                "src": "6483:9:47"
                              }
                            ],
                            "id": 9530,
                            "name": "FunctionCall",
                            "src": "6466:27:47"
                          }
                        ],
                        "id": 9531,
                        "name": "Assignment",
                        "src": "6452:41:47"
                      }
                    ],
                    "id": 9532,
                    "name": "ExpressionStatement",
                    "src": "6452:41:47"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9521,
                              "type": "bytes memory",
                              "value": "metaData"
                            },
                            "id": 9533,
                            "name": "Identifier",
                            "src": "6503:8:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes calldata",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr_slice",
                                      "typeString": "bytes calldata slice"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes storage pointer)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": null
                                    },
                                    "id": 9534,
                                    "name": "ElementaryTypeName",
                                    "src": "6514:5:47"
                                  }
                                ],
                                "id": 9535,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6514:5:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "bytes calldata slice"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9512,
                                      "type": "bytes calldata",
                                      "value": "data"
                                    },
                                    "id": 9536,
                                    "name": "Identifier",
                                    "src": "6520:4:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "3332",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 32",
                                      "value": "32"
                                    },
                                    "id": 9537,
                                    "name": "Literal",
                                    "src": "6525:2:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "+",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3332",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 32",
                                          "value": "32"
                                        },
                                        "id": 9538,
                                        "name": "Literal",
                                        "src": "6528:2:47"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9518,
                                          "type": "uint256",
                                          "value": "lenMetadata"
                                        },
                                        "id": 9539,
                                        "name": "Identifier",
                                        "src": "6533:11:47"
                                      }
                                    ],
                                    "id": 9540,
                                    "name": "BinaryOperation",
                                    "src": "6528:16:47"
                                  }
                                ],
                                "id": 9541,
                                "name": "IndexRangeAccess",
                                "src": "6520:25:47"
                              }
                            ],
                            "id": 9542,
                            "name": "FunctionCall",
                            "src": "6514:32:47"
                          }
                        ],
                        "id": 9543,
                        "name": "Assignment",
                        "src": "6503:43:47"
                      }
                    ],
                    "id": 9544,
                    "name": "ExpressionStatement",
                    "src": "6503:43:47"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9546
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "contractAddress",
                          "overrides": null,
                          "scope": 9592,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 9545,
                            "name": "ElementaryTypeName",
                            "src": "6557:7:47"
                          }
                        ],
                        "id": 9546,
                        "name": "VariableDeclaration",
                        "src": "6557:23:47"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9310,
                              "type": "mapping(bytes32 => address)",
                              "value": "_resourceIDToContractAddress"
                            },
                            "id": 9547,
                            "name": "Identifier",
                            "src": "6583:28:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9510,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9548,
                            "name": "Identifier",
                            "src": "6612:10:47"
                          }
                        ],
                        "id": 9549,
                        "name": "IndexAccess",
                        "src": "6583:40:47"
                      }
                    ],
                    "id": 9550,
                    "name": "VariableDeclarationStatement",
                    "src": "6557:66:47"
                  },
                  {
                    "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_b35e1d4b1392122547a6ef1db8ad0b6549b5cc8820bfc81437cf78f8b1333b05",
                                  "typeString": "literal_string \"provided contractAddress is not whitelisted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 9551,
                            "name": "Identifier",
                            "src": "6633:7:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9330,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 9552,
                                "name": "Identifier",
                                "src": "6641:18:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9546,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9553,
                                "name": "Identifier",
                                "src": "6660:15:47"
                              }
                            ],
                            "id": 9554,
                            "name": "IndexAccess",
                            "src": "6641:35:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "70726f766964656420636f6e747261637441646472657373206973206e6f742077686974656c6973746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"provided contractAddress is not whitelisted\"",
                              "value": "provided contractAddress is not whitelisted"
                            },
                            "id": 9555,
                            "name": "Literal",
                            "src": "6678:45:47"
                          }
                        ],
                        "id": 9556,
                        "name": "FunctionCall",
                        "src": "6633:91:47"
                      }
                    ],
                    "id": 9557,
                    "name": "ExpressionStatement",
                    "src": "6633:91:47"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        9559
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "sig",
                          "overrides": null,
                          "scope": 9592,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes4",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes4",
                              "type": "bytes4"
                            },
                            "id": 9558,
                            "name": "ElementaryTypeName",
                            "src": "6735:6:47"
                          }
                        ],
                        "id": 9559,
                        "name": "VariableDeclaration",
                        "src": "6735:10:47"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bytes4"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9326,
                              "type": "mapping(address => bytes4)",
                              "value": "_contractAddressToExecuteFunctionSignature"
                            },
                            "id": 9560,
                            "name": "Identifier",
                            "src": "6748:42:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9546,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9561,
                            "name": "Identifier",
                            "src": "6791:15:47"
                          }
                        ],
                        "id": 9562,
                        "name": "IndexAccess",
                        "src": "6748:59:47"
                      }
                    ],
                    "id": 9563,
                    "name": "VariableDeclarationStatement",
                    "src": "6735:72:47"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9559,
                              "type": "bytes4",
                              "value": "sig"
                            },
                            "id": 9564,
                            "name": "Identifier",
                            "src": "6821:3:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes4",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes4)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes4",
                                      "type": null
                                    },
                                    "id": 9565,
                                    "name": "ElementaryTypeName",
                                    "src": "6828:6:47"
                                  }
                                ],
                                "id": 9566,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6828:6:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 9567,
                                "name": "Literal",
                                "src": "6835:1:47"
                              }
                            ],
                            "id": 9568,
                            "name": "FunctionCall",
                            "src": "6828:9:47"
                          }
                        ],
                        "id": 9569,
                        "name": "BinaryOperation",
                        "src": "6821:16:47"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                9571
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "callData",
                                  "overrides": null,
                                  "scope": 9590,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 9570,
                                    "name": "ElementaryTypeName",
                                    "src": "6853:5:47"
                                  }
                                ],
                                "id": 9571,
                                "name": "VariableDeclaration",
                                "src": "6853:21:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encodePacked",
                                      "referencedDeclaration": null,
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -1,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 9572,
                                        "name": "Identifier",
                                        "src": "6877:3:47"
                                      }
                                    ],
                                    "id": 9573,
                                    "name": "MemberAccess",
                                    "src": "6877:16:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9559,
                                      "type": "bytes4",
                                      "value": "sig"
                                    },
                                    "id": 9574,
                                    "name": "Identifier",
                                    "src": "6894:3:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9521,
                                      "type": "bytes memory",
                                      "value": "metaData"
                                    },
                                    "id": 9575,
                                    "name": "Identifier",
                                    "src": "6899:8:47"
                                  }
                                ],
                                "id": 9576,
                                "name": "FunctionCall",
                                "src": "6877:31:47"
                              }
                            ],
                            "id": 9577,
                            "name": "VariableDeclarationStatement",
                            "src": "6853:55:47"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                9579,
                                null
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "overrides": null,
                                  "scope": 9590,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "bool",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bool",
                                      "type": "bool"
                                    },
                                    "id": 9578,
                                    "name": "ElementaryTypeName",
                                    "src": "6923:4:47"
                                  }
                                ],
                                "id": 9579,
                                "name": "VariableDeclaration",
                                "src": "6923:12:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "tuple(bool,bytes memory)",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "call",
                                      "referencedDeclaration": null,
                                      "type": "function (bytes memory) payable returns (bool,bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 9546,
                                          "type": "address",
                                          "value": "contractAddress"
                                        },
                                        "id": 9580,
                                        "name": "Identifier",
                                        "src": "6940:15:47"
                                      }
                                    ],
                                    "id": 9581,
                                    "name": "MemberAccess",
                                    "src": "6940:20:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9571,
                                      "type": "bytes memory",
                                      "value": "callData"
                                    },
                                    "id": 9582,
                                    "name": "Identifier",
                                    "src": "6961:8:47"
                                  }
                                ],
                                "id": 9583,
                                "name": "FunctionCall",
                                "src": "6940:30:47"
                              }
                            ],
                            "id": 9584,
                            "name": "VariableDeclarationStatement",
                            "src": "6922:48:47"
                          },
                          {
                            "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_51f8dc53a1a1265d7e1a33da60330d21af9ee076b3a370b08330721ff4064ac2",
                                          "typeString": "literal_string \"delegatecall to contractAddress failed\""
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "type": "function (bool,string memory) pure",
                                      "value": "require"
                                    },
                                    "id": 9585,
                                    "name": "Identifier",
                                    "src": "6984:7:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 9579,
                                      "type": "bool",
                                      "value": "success"
                                    },
                                    "id": 9586,
                                    "name": "Identifier",
                                    "src": "6992:7:47"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "64656c656761746563616c6c20746f20636f6e747261637441646472657373206661696c6564",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "string",
                                      "type": "literal_string \"delegatecall to contractAddress failed\"",
                                      "value": "delegatecall to contractAddress failed"
                                    },
                                    "id": 9587,
                                    "name": "Literal",
                                    "src": "7001:40:47"
                                  }
                                ],
                                "id": 9588,
                                "name": "FunctionCall",
                                "src": "6984:58:47"
                              }
                            ],
                            "id": 9589,
                            "name": "ExpressionStatement",
                            "src": "6984:58:47"
                          }
                        ],
                        "id": 9590,
                        "name": "Block",
                        "src": "6839:214:47"
                      }
                    ],
                    "id": 9591,
                    "name": "IfStatement",
                    "src": "6817:236:47"
                  }
                ],
                "id": 9592,
                "name": "Block",
                "src": "6376:683:47"
              }
            ],
            "id": 9593,
            "name": "FunctionDefinition",
            "src": "6290:769:47"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_setResource",
              "overrides": null,
              "scope": 9644,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "resourceID",
                      "overrides": null,
                      "scope": 9643,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 9594,
                        "name": "ElementaryTypeName",
                        "src": "7096:7:47"
                      }
                    ],
                    "id": 9595,
                    "name": "VariableDeclaration",
                    "src": "7096:18:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "contractAddress",
                      "overrides": null,
                      "scope": 9643,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 9596,
                        "name": "ElementaryTypeName",
                        "src": "7124:7:47"
                      }
                    ],
                    "id": 9597,
                    "name": "VariableDeclaration",
                    "src": "7124:23:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "depositFunctionSig",
                      "overrides": null,
                      "scope": 9643,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 9598,
                        "name": "ElementaryTypeName",
                        "src": "7157:6:47"
                      }
                    ],
                    "id": 9599,
                    "name": "VariableDeclaration",
                    "src": "7157:25:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "depositFunctionDepositerOffset",
                      "overrides": null,
                      "scope": 9643,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 9600,
                        "name": "ElementaryTypeName",
                        "src": "7192:7:47"
                      }
                    ],
                    "id": 9601,
                    "name": "VariableDeclaration",
                    "src": "7192:38:47"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "executeFunctionSig",
                      "overrides": null,
                      "scope": 9643,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 9602,
                        "name": "ElementaryTypeName",
                        "src": "7240:6:47"
                      }
                    ],
                    "id": 9603,
                    "name": "VariableDeclaration",
                    "src": "7240:25:47"
                  }
                ],
                "id": 9604,
                "name": "ParameterList",
                "src": "7086:185:47"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 9605,
                "name": "ParameterList",
                "src": "7281:0:47"
              },
              {
                "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": 9310,
                                  "type": "mapping(bytes32 => address)",
                                  "value": "_resourceIDToContractAddress"
                                },
                                "id": 9606,
                                "name": "Identifier",
                                "src": "7291:28:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9595,
                                  "type": "bytes32",
                                  "value": "resourceID"
                                },
                                "id": 9607,
                                "name": "Identifier",
                                "src": "7320:10:47"
                              }
                            ],
                            "id": 9608,
                            "name": "IndexAccess",
                            "src": "7291:40:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9597,
                              "type": "address",
                              "value": "contractAddress"
                            },
                            "id": 9609,
                            "name": "Identifier",
                            "src": "7334:15:47"
                          }
                        ],
                        "id": 9610,
                        "name": "Assignment",
                        "src": "7291:58:47"
                      }
                    ],
                    "id": 9611,
                    "name": "ExpressionStatement",
                    "src": "7291:58:47"
                  },
                  {
                    "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": 9314,
                                  "type": "mapping(address => bytes32)",
                                  "value": "_contractAddressToResourceID"
                                },
                                "id": 9612,
                                "name": "Identifier",
                                "src": "7359:28:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9597,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9613,
                                "name": "Identifier",
                                "src": "7388:15:47"
                              }
                            ],
                            "id": 9614,
                            "name": "IndexAccess",
                            "src": "7359:45:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9595,
                              "type": "bytes32",
                              "value": "resourceID"
                            },
                            "id": 9615,
                            "name": "Identifier",
                            "src": "7407:10:47"
                          }
                        ],
                        "id": 9616,
                        "name": "Assignment",
                        "src": "7359:58:47"
                      }
                    ],
                    "id": 9617,
                    "name": "ExpressionStatement",
                    "src": "7359:58:47"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes4"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bytes4"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9318,
                                  "type": "mapping(address => bytes4)",
                                  "value": "_contractAddressToDepositFunctionSignature"
                                },
                                "id": 9618,
                                "name": "Identifier",
                                "src": "7427:42:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9597,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9619,
                                "name": "Identifier",
                                "src": "7470:15:47"
                              }
                            ],
                            "id": 9620,
                            "name": "IndexAccess",
                            "src": "7427:59:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9599,
                              "type": "bytes4",
                              "value": "depositFunctionSig"
                            },
                            "id": 9621,
                            "name": "Identifier",
                            "src": "7489:18:47"
                          }
                        ],
                        "id": 9622,
                        "name": "Assignment",
                        "src": "7427:80:47"
                      }
                    ],
                    "id": 9623,
                    "name": "ExpressionStatement",
                    "src": "7427:80:47"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9322,
                                  "type": "mapping(address => uint256)",
                                  "value": "_contractAddressToDepositFunctionDepositerOffset"
                                },
                                "id": 9624,
                                "name": "Identifier",
                                "src": "7517:48:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9597,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9625,
                                "name": "Identifier",
                                "src": "7566:15:47"
                              }
                            ],
                            "id": 9626,
                            "name": "IndexAccess",
                            "src": "7517:65:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9601,
                              "type": "uint256",
                              "value": "depositFunctionDepositerOffset"
                            },
                            "id": 9627,
                            "name": "Identifier",
                            "src": "7585:30:47"
                          }
                        ],
                        "id": 9628,
                        "name": "Assignment",
                        "src": "7517:98:47"
                      }
                    ],
                    "id": 9629,
                    "name": "ExpressionStatement",
                    "src": "7517:98:47"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes4"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bytes4"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9326,
                                  "type": "mapping(address => bytes4)",
                                  "value": "_contractAddressToExecuteFunctionSignature"
                                },
                                "id": 9630,
                                "name": "Identifier",
                                "src": "7625:42:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9597,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9631,
                                "name": "Identifier",
                                "src": "7668:15:47"
                              }
                            ],
                            "id": 9632,
                            "name": "IndexAccess",
                            "src": "7625:59:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 9603,
                              "type": "bytes4",
                              "value": "executeFunctionSig"
                            },
                            "id": 9633,
                            "name": "Identifier",
                            "src": "7687:18:47"
                          }
                        ],
                        "id": 9634,
                        "name": "Assignment",
                        "src": "7625:80:47"
                      }
                    ],
                    "id": 9635,
                    "name": "ExpressionStatement",
                    "src": "7625:80:47"
                  },
                  {
                    "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": 9330,
                                  "type": "mapping(address => bool)",
                                  "value": "_contractWhitelist"
                                },
                                "id": 9636,
                                "name": "Identifier",
                                "src": "7716:18:47"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 9597,
                                  "type": "address",
                                  "value": "contractAddress"
                                },
                                "id": 9637,
                                "name": "Identifier",
                                "src": "7735:15:47"
                              }
                            ],
                            "id": 9638,
                            "name": "IndexAccess",
                            "src": "7716:35:47"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 9639,
                            "name": "Literal",
                            "src": "7754:4:47"
                          }
                        ],
                        "id": 9640,
                        "name": "Assignment",
                        "src": "7716:42:47"
                      }
                    ],
                    "id": 9641,
                    "name": "ExpressionStatement",
                    "src": "7716:42:47"
                  }
                ],
                "id": 9642,
                "name": "Block",
                "src": "7281:484:47"
              }
            ],
            "id": 9643,
            "name": "FunctionDefinition",
            "src": "7065:700:47"
          }
        ],
        "id": 9644,
        "name": "ContractDefinition",
        "src": "320:7447:47"
      }
    ],
    "id": 9645,
    "name": "SourceUnit",
    "src": "42:7726:47"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.3",
  "updatedAt": "2021-11-29T02:07:34.270Z",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "bridgeAddress": "Contract address of previously deployed Bridge."
        }
      },
      "deposit(bytes32,address,bytes)": {
        "params": {
          "data": "Consists of: {resourceID}, {lenMetaData}, and {metaData} all padded to 32 bytes.",
          "depositer": "Address of the account making deposit in the Bridge contract.",
          "resourceID": "ResourceID used to find address of contract to be used for deposit."
        },
        "returns": {
          "_0": "Returns the raw bytes returned from the call to {contractAddress}."
        }
      },
      "executeProposal(bytes32,bytes)": {
        "params": {
          "data": "Consists of {resourceID}, {lenMetaData}, and {metaData}."
        }
      },
      "setResource(bytes32,address,bytes4,uint256,bytes4)": {
        "params": {
          "contractAddress": "Address of contract to be called when a deposit is made and a deposited is executed.",
          "depositFunctionDepositerOffset": "Depositer address position offset in the metadata, in bytes.",
          "depositFunctionSig": "Function signature of method to be called in {contractAddress} when a deposit is made.",
          "executeFunctionSig": "Function signature of method to be called in {contractAddress} when a deposit is executed.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      }
    },
    "title": "Handles generic deposits and deposit executions.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "deposit(bytes32,address,bytes)": {
        "notice": "A deposit is initiatied by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: len(data)                              uint256     bytes  0  - 32 data                                   bytes       bytes  64 - END{contractAddress} is required to be whitelistedIf {_contractAddressToDepositFunctionSignature}[{contractAddress}] is set, {metaData} is expected to consist of needed function arguments."
      },
      "executeProposal(bytes32,bytes)": {
        "notice": "Proposal execution should be initiated when a proposal is finalized in the Bridge contract.Data passed into the function should be constructed as follows: len(data)                              uint256     bytes  0  - 32 data                                   bytes       bytes  32 - END{contractAddress} is required to be whitelistedIf {_contractAddressToExecuteFunctionSignature}[{contractAddress}] is set, {metaData} is expected to consist of needed function arguments."
      },
      "setResource(bytes32,address,bytes4,uint256,bytes4)": {
        "notice": "First verifies {_resourceIDToContractAddress}[{resourceID}] and {_contractAddressToResourceID}[{contractAddress}] are not already set, then sets {_resourceIDToContractAddress} with {contractAddress}, {_contractAddressToResourceID} with {resourceID}, {_contractAddressToDepositFunctionSignature} with {depositFunctionSig}, {_contractAddressToDepositFunctionDepositerOffset} with {depositFunctionDepositerOffset}, {_contractAddressToExecuteFunctionSignature} with {executeFunctionSig}, and {_contractWhitelist} to true for {contractAddress}."
      }
    },
    "notice": "This contract is intended to be used with the Bridge contract.",
    "version": 1
  }
}