{
  "contractName": "DefaultCompliance",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "TokenAgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "TokenAgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "TokenBound",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "TokenUnbound",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "isTokenAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "isTokenBound",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "addTokenAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agentAddress",
          "type": "address"
        }
      ],
      "name": "removeTokenAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "bindToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "unbindToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "canTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "transferred",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "created",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "destroyed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnershipOnComplianceContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_agentAddress\",\"type\":\"address\"}],\"name\":\"TokenAgentAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_agentAddress\",\"type\":\"address\"}],\"name\":\"TokenAgentRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"TokenBound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"TokenUnbound\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agentAddress\",\"type\":\"address\"}],\"name\":\"addTokenAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"bindToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"canTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"created\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"destroyed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agentAddress\",\"type\":\"address\"}],\"name\":\"isTokenAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"isTokenBound\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agentAddress\",\"type\":\"address\"}],\"name\":\"removeTokenAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnershipOnComplianceContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferred\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"unbindToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addTokenAgent(address)\":{\"details\":\"See {ICompliance-addTokenAgent}.\"},\"bindToken(address)\":{\"details\":\"See {ICompliance-isTokenAgent}.\"},\"canTransfer(address,address,uint256)\":{\"details\":\"See {ICompliance-canTransfer}.\"},\"created(address,uint256)\":{\"details\":\"See {ICompliance-created}.\"},\"destroyed(address,uint256)\":{\"details\":\"See {ICompliance-destroyed}.\"},\"isTokenAgent(address)\":{\"details\":\"See {ICompliance-isTokenAgent}.\"},\"isTokenBound(address)\":{\"details\":\"See {ICompliance-isTokenBound}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeTokenAgent(address)\":{\"details\":\"See {ICompliance-isTokenAgent}.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferOwnershipOnComplianceContract(address)\":{\"details\":\"See {ICompliance-transferOwnershipOnComplianceContract}.\"},\"transferred(address,address,uint256)\":{\"details\":\"See {ICompliance-transferred}.\"},\"unbindToken(address)\":{\"details\":\"See {ICompliance-isTokenAgent}.\"}},\"stateVariables\":{\"_tokenAgentsList\":{\"details\":\"Mapping between agents and their statuses\"},\"_tokensBound\":{\"details\":\"Mapping of tokens linked to the compliance contract\"}},\"version\":1},\"userdoc\":{\"events\":{\"TokenAgentAdded(address)\":{\"notice\":\"this event is emitted when the Agent has been added on the allowedList of this Compliance.  the event is emitted by the Compliance constructor and by the addTokenAgent function  `_agentAddress` is the address of the Agent to add\"},\"TokenAgentRemoved(address)\":{\"notice\":\"this event is emitted when the Agent has been removed from the agent list of this Compliance.  the event is emitted by the Compliance constructor and by the removeTokenAgent function  `_agentAddress` is the address of the Agent to remove\"},\"TokenBound(address)\":{\"notice\":\"this event is emitted when a token has been bound to the compliance contract  the event is emitted by the bindToken function  `_token` is the address of the token to bind\"},\"TokenUnbound(address)\":{\"notice\":\"this event is emitted when a token has been unbound from the compliance contract  the event is emitted by the unbindToken function  `_token` is the address of the token to unbind\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/compliance/DefaultCompliance.sol\":\"DefaultCompliance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/compliance/DefaultCompliance.sol\":{\"keccak256\":\"0xe8c76d868128706ffc86a87997679e3b6782d15a06f68839e42aa10d549974bd\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://5cf35c5aa040b93c7df8c0709d7b8d8441bb19f99d71fb9cf1228bfdc1056e27\",\"dweb:/ipfs/QmTcspRyapBn5gkaRcjgVc7GVugXmRPTFaEEeyz3AEK67D\"]},\"project:/contracts/compliance/ICompliance.sol\":{\"keccak256\":\"0x4049905b34eab118c0c3f644450299a5ed8022bbbdb26036e7c2854dae8ae1ba\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f8144953d88f543b2f537514f1136b8adf705837ba6d420b95569f6895153edb\",\"dweb:/ipfs/QmRqM7A6XrofFR67k8RtNNEkriAbKsQHDgUYaKZTMr9Nm5\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107598061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100ba5760003560e01c8063346531fa146100bf5780633ff5aa021461010057806340db3b50146101155780635f8dead314610128578063715018a61461013a5780637bcf0487146101425780638baf29b4146101555780638d2ea772146101285780638da5cb5b14610168578063993e8b951461017d578063cdde2932146101a9578063e46638e6146101bc578063f2fde38b146101d3578063ff3e6954146101e6575b600080fd5b6100eb6100cd366004610687565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61011361010e366004610687565b6101f9565b005b610113610123366004610687565b6102cb565b6101136101363660046106a9565b5050565b610113610389565b610113610150366004610687565b61039d565b6101136101633660046106d3565b505050565b6101706103b1565b6040516100f7919061070f565b6100eb61018b366004610687565b6001600160a01b031660009081526002602052604090205460ff1690565b6101136101b7366004610687565b6103c0565b6100eb6101ca3660046106d3565b60019392505050565b6101136101e1366004610687565b610480565b6101136101f4366004610687565b6104f6565b6102016105bc565b6001600160a01b03811660009081526002602052604090205460ff161561026d5760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc8185b1c9958591e48189bdd5b99602a1b60448201526064015b60405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b906102c090839061070f565b60405180910390a150565b6102d36105bc565b6001600160a01b03811660009081526002602052604090205460ff166103395760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc81b9bdd08189bdd5b99081e595d602a1b6044820152606401610264565b6001600160a01b03811660009081526002602052604090819020805460ff19169055517f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a906102c090839061070f565b6103916105bc565b61039b600061061b565b565b6103a56105bc565b6103ae81610480565b50565b6000546001600160a01b031690565b6103c86105bc565b6001600160a01b03811660009081526001602052604090205460ff166104305760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610264565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a6906102c090839061070f565b6104886105bc565b6001600160a01b0381166104ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610264565b6103ae8161061b565b6104fe6105bc565b6001600160a01b03811660009081526001602052604090205460ff16156105675760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610264565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d906102c090839061070f565b336105c56103b1565b6001600160a01b03161461039b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461068257600080fd5b919050565b60006020828403121561069957600080fd5b6106a28261066b565b9392505050565b600080604083850312156106bc57600080fd5b6106c58361066b565b946020939093013593505050565b6000806000606084860312156106e857600080fd5b6106f18461066b565b92506106ff6020850161066b565b9150604084013590509250925092565b6001600160a01b039190911681526020019056fea2646970667358221220a07950ac50d69eda6d9047a66840e329950d44170805982a8421f7a81637ad5c64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ba5760003560e01c8063346531fa146100bf5780633ff5aa021461010057806340db3b50146101155780635f8dead314610128578063715018a61461013a5780637bcf0487146101425780638baf29b4146101555780638d2ea772146101285780638da5cb5b14610168578063993e8b951461017d578063cdde2932146101a9578063e46638e6146101bc578063f2fde38b146101d3578063ff3e6954146101e6575b600080fd5b6100eb6100cd366004610687565b6001600160a01b031660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61011361010e366004610687565b6101f9565b005b610113610123366004610687565b6102cb565b6101136101363660046106a9565b5050565b610113610389565b610113610150366004610687565b61039d565b6101136101633660046106d3565b505050565b6101706103b1565b6040516100f7919061070f565b6100eb61018b366004610687565b6001600160a01b031660009081526002602052604090205460ff1690565b6101136101b7366004610687565b6103c0565b6100eb6101ca3660046106d3565b60019392505050565b6101136101e1366004610687565b610480565b6101136101f4366004610687565b6104f6565b6102016105bc565b6001600160a01b03811660009081526002602052604090205460ff161561026d5760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc8185b1c9958591e48189bdd5b99602a1b60448201526064015b60405180910390fd5b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f2de35142b19ed5a07796cf30791959c592018f70b1d2d7c460eef8ffe713692b906102c090839061070f565b60405180910390a150565b6102d36105bc565b6001600160a01b03811660009081526002602052604090205460ff166103395760405162461bcd60e51b815260206004820152601b60248201527a151a1a5cc81d1bdad95b881a5cc81b9bdd08189bdd5b99081e595d602a1b6044820152606401610264565b6001600160a01b03811660009081526002602052604090819020805460ff19169055517f28a4ca7134a3b3f9aff286e79ad3daadb4a06d1b43d037a3a98bdc074edd9b7a906102c090839061070f565b6103916105bc565b61039b600061061b565b565b6103a56105bc565b6103ae81610480565b50565b6000546001600160a01b031690565b6103c86105bc565b6001600160a01b03811660009081526001602052604090205460ff166104305760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e74206973206e6f742072656769737465726564207965746044820152606401610264565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517f6a659bb87bb23efbdc295f8eed8ae8c4379bfb77660ced2ef0f3d7d26b05c6a6906102c090839061070f565b6104886105bc565b6001600160a01b0381166104ed5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610264565b6103ae8161061b565b6104fe6105bc565b6001600160a01b03811660009081526001602052604090205460ff16156105675760405162461bcd60e51b815260206004820181905260248201527f54686973204167656e7420697320616c726561647920726567697374657265646044820152606401610264565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517fd62c45e13ac30396aceb3ad37c89bd1ba9048032fe61679000e92eb93dbfd67d906102c090839061070f565b336105c56103b1565b6001600160a01b03161461039b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610264565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461068257600080fd5b919050565b60006020828403121561069957600080fd5b6106a28261066b565b9392505050565b600080604083850312156106bc57600080fd5b6106c58361066b565b946020939093013593505050565b6000806000606084860312156106e857600080fd5b6106f18461066b565b92506106ff6020850161066b565b9150604084013590509250925092565b6001600160a01b039190911681526020019056fea2646970667358221220a07950ac50d69eda6d9047a66840e329950d44170805982a8421f7a81637ad5c64736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:3574:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "63:124:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "73:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "95:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "82:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "82:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "73:5:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "165:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "174:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "177:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "167:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "167:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "167:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "124:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "135:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "150:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "155:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "146:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "146:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "159:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "142:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "142:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "131:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "131:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "121:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "121:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "114:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "114:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "111:70:54"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "42:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "53:5:54",
                "type": ""
              }
            ],
            "src": "14:173:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "262:116:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "308:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "317:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "320:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "310:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "310:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "310:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "283:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "292:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "279:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "279:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "304:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "275:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "275:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "272:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "333:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "362:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "343:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "343:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "333:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "228:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "239:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "251:6:54",
                "type": ""
              }
            ],
            "src": "192:186:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "478:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "488:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "500:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "511:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "496:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "496:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "488:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "530:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "555:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "548:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "548:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "541:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "541:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "523:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "523:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "523:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "447:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "458:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "469:4:54",
                "type": ""
              }
            ],
            "src": "383:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "662:167:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "708:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "717:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "720:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "710:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "710:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "710:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "683:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "692:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "679:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "679:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "704:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "675:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "675:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "672:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "733:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "762:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "743:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "743:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "733:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "781:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "808:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "819:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "804:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "804:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "791:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "791:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "781:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "620:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "631:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "643:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "651:6:54",
                "type": ""
              }
            ],
            "src": "575:254:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "938:224:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "984:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "993:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "996:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "986:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "986:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "986:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "959:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "968:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "955:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "955:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "980:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "951:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "951:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "948:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1009:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1038:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "1019:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1019:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1009:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1057:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1090:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1101:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1086:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1086:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "1067:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1067:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1057:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1114:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1141:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1152:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1137:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1137:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1124:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1124:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "1114:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "888:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "899:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "911:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "919:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "927:6:54",
                "type": ""
              }
            ],
            "src": "834:328:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1268:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1278:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1290:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1301:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1286:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1286:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1278:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1320:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1335:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1351:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1356:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1347:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1347:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1360:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1343:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1343:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1331:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1331:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1313:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1313:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1313:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1237:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1248:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1259:4:54",
                "type": ""
              }
            ],
            "src": "1167:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1549:177:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1566:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1577:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1559:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1559:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1559:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1600:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1611:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1596:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1596:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1616:2:54",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1589:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1589:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1589:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1639:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1650:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1635:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1635:18:54"
                      },
                      {
                        "hexValue": "5468697320746f6b656e20697320616c726561647920626f756e64",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1655:29:54",
                        "type": "",
                        "value": "This token is already bound"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1628:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1628:57:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1628:57:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1694:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1706:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1717:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1702:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1702:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1694:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_8d624724abe04cec2c9dea2aa97d440b8d5ae1d5bee60672fd7f8561ed33045c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1526:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1540:4:54",
                "type": ""
              }
            ],
            "src": "1375:351:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1905:177:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1922:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1933:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1915:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1915:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1915:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1956:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1967:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1952:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1952:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1972:2:54",
                        "type": "",
                        "value": "27"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1945:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1945:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1945:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1995:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2006:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1991:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1991:18:54"
                      },
                      {
                        "hexValue": "5468697320746f6b656e206973206e6f7420626f756e6420796574",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2011:29:54",
                        "type": "",
                        "value": "This token is not bound yet"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1984:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1984:57:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1984:57:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2050:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2062:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2073:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2058:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2058:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2050:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_3a32dea6d728f3e51c5acf0744a2444ea4633c5416095bb4680eff562369b243__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1882:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1896:4:54",
                "type": ""
              }
            ],
            "src": "1731:351:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2261:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2278:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2289:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2271:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2271:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2271:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2312:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2323:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2308:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2308:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2328:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2301:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2301:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2301:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2351:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2362:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2347:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2347:18:54"
                      },
                      {
                        "hexValue": "54686973204167656e74206973206e6f74207265676973746572656420796574",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2367:34:54",
                        "type": "",
                        "value": "This Agent is not registered yet"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2340:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2340:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2340:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2411:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2423:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2434:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2419:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2419:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2411:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_38bfff34683fb8fd7d13833d348fcfd97f4e4308582363f470fc6498e3ad489c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2238:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2252:4:54",
                "type": ""
              }
            ],
            "src": "2087:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2622:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2639:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2650:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2632:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2632:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2632:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2673:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2684:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2669:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2669:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2689:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2662:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2662:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2662:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2712:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2723:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2708:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2708:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2728:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2701:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2701:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2701:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2783:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2794:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2779:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2779:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2799:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2772:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2772:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2772:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2817:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2829:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2840:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2825:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2825:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2817:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2599:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2613:4:54",
                "type": ""
              }
            ],
            "src": "2448:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3029:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3046:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3057:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3039:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3039:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3039:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3080:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3091:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3076:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3076:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3096:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3069:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3069:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3069:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3119:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3130:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3115:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3115:18:54"
                      },
                      {
                        "hexValue": "54686973204167656e7420697320616c72656164792072656769737465726564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3135:34:54",
                        "type": "",
                        "value": "This Agent is already registered"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3108:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3108:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3108:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3179:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3191:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3202:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3187:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3187:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3179:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_94e04ceb3646f4f8dc1e8519090d5e6cbdbc2153be960a40dcab924db6e7024c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3006:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3020:4:54",
                "type": ""
              }
            ],
            "src": "2855:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3390:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3407:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3418:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3400:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3400:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3400:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3441:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3452:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3437:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3437:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3457:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3430:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3430:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3430:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3480:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3491:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3476:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3476:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3496:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3469:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3469:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3469:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3540:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3552:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3563:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3548:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3548:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3540:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3367:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3381:4:54",
                "type": ""
              }
            ],
            "src": "3216:356:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_8d624724abe04cec2c9dea2aa97d440b8d5ae1d5bee60672fd7f8561ed33045c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"This token is already bound\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3a32dea6d728f3e51c5acf0744a2444ea4633c5416095bb4680eff562369b243__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"This token is not bound yet\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_38bfff34683fb8fd7d13833d348fcfd97f4e4308582363f470fc6498e3ad489c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"This Agent is not registered yet\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_94e04ceb3646f4f8dc1e8519090d5e6cbdbc2153be960a40dcab924db6e7024c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"This Agent is already registered\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1202:2854:29:-:0;;;;;;;;;;;;-1:-1:-1;936:32:13;719:10:20;936:18:13;:32::i;:::-;1202:2854:29;;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1202:2854:29:-;;;;;;;",
  "deployedSourceMap": "1202:2854:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1548:138;;;;;;:::i;:::-;-1:-1:-1;;;;;1647:31:29;1623:4;1647:31;;;:16;:31;;;;;;;;;1548:138;;;;548:14:54;;541:22;523:41;;511:2;496:18;1548:138:29;;;;;;;;2602:211;;;;;;:::i;:::-;;:::i;:::-;;2880:215;;;;;;:::i;:::-;;:::i;3601:78::-;;;;;;:::i;:::-;;;;1831:101:13;;;:::i;3917:137:29:-;;;;;;:::i;:::-;;:::i;3406:133::-;;;;;;:::i;:::-;;;;;1201:85:13;;;:::i;:::-;;;;;;;:::i;1753:120:29:-;;;;;;:::i;:::-;-1:-1:-1;;;;;1845:20:29;1821:4;1845:20;;;:12;:20;;;;;;;;;1753:120;2269:266;;;;;;:::i;:::-;;:::i;3161:179::-;;;;;;:::i;:::-;3329:4;3161:179;;;;;;2081:198:13;;;;;;:::i;:::-;;:::i;1941:261:29:-;;;;;;:::i;:::-;;:::i;2602:211::-;1094:13:13;:11;:13::i;:::-;-1:-1:-1;;;;;2684:20:29;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;2683:21;2675:61;;;::::0;-1:-1:-1;;;2675:61:29;;1577:2:54;2675:61:29::1;::::0;::::1;1559:21:54::0;1616:2;1596:18;;;1589:30;-1:-1:-1;;;1635:18:54;;;1628:57;1702:18;;2675:61:29::1;;;;;;;;;-1:-1:-1::0;;;;;2746:20:29;::::1;;::::0;;;:12:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;2746:27:29::1;2769:4;2746:27;::::0;;2788:18;::::1;::::0;::::1;::::0;2759:6;;2788:18:::1;:::i;:::-;;;;;;;;2602:211:::0;:::o;2880:215::-;1094:13:13;:11;:13::i;:::-;-1:-1:-1;;;;;2963:20:29;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;2955:60;;;::::0;-1:-1:-1;;;2955:60:29;;1933:2:54;2955:60:29::1;::::0;::::1;1915:21:54::0;1972:2;1952:18;;;1945:30;-1:-1:-1;;;1991:18:54;;;1984:57;2058:18;;2955:60:29::1;1731:351:54::0;2955:60:29::1;-1:-1:-1::0;;;;;3025:20:29;::::1;3048:5;3025:20:::0;;;:12:::1;:20;::::0;;;;;;:28;;-1:-1:-1;;3025:28:29::1;::::0;;3068:20;::::1;::::0;::::1;::::0;3038:6;;3068:20:::1;:::i;1831:101:13:-:0;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;3917:137:29:-;1094:13:13;:11;:13::i;:::-;4020:27:29::1;4038:8;4020:17;:27::i;:::-;3917:137:::0;:::o;1201:85:13:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:13;;1201:85::o;2269:266:29:-;1094:13:13;:11;:13::i;:::-;-1:-1:-1;;;;;2364:31:29;::::1;;::::0;;;:16:::1;:31;::::0;;;;;::::1;;2356:76;;;::::0;-1:-1:-1;;;2356:76:29;;2289:2:54;2356:76:29::1;::::0;::::1;2271:21:54::0;;;2308:18;;;2301:30;2367:34;2347:18;;;2340:62;2419:18;;2356:76:29::1;2087:356:54::0;2356:76:29::1;-1:-1:-1::0;;;;;2442:31:29;::::1;2476:5;2442:31:::0;;;:16:::1;:31;::::0;;;;;;:39;;-1:-1:-1;;2442:39:29::1;::::0;;2496:32;::::1;::::0;::::1;::::0;2459:13;;2496:32:::1;:::i;2081:198:13:-:0;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;2650:2:54;2161:73:13::1;::::0;::::1;2632:21:54::0;2689:2;2669:18;;;2662:30;2728:34;2708:18;;;2701:62;-1:-1:-1;;;2779:18:54;;;2772:36;2825:19;;2161:73:13::1;2448:402:54::0;2161:73:13::1;2244:28;2263:8;2244:18;:28::i;1941:261:29:-:0;1094:13:13;:11;:13::i;:::-;-1:-1:-1;;;;;2034:31:29;::::1;;::::0;;;:16:::1;:31;::::0;;;;;::::1;;2033:32;2025:77;;;::::0;-1:-1:-1;;;2025:77:29;;3057:2:54;2025:77:29::1;::::0;::::1;3039:21:54::0;;;3076:18;;;3069:30;3135:34;3115:18;;;3108:62;3187:18;;2025:77:29::1;2855:356:54::0;2025:77:29::1;-1:-1:-1::0;;;;;2112:31:29;::::1;;::::0;;;2146:4:::1;2112:31;::::0;;;;;;;;:38;;-1:-1:-1;;2112:38:29::1;::::0;;::::1;::::0;;2165:30;::::1;::::0;::::1;::::0;2129:13;;2165:30:::1;:::i;1359:130:13:-:0;719:10:20;1422:7:13;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:13;;1414:68;;;;-1:-1:-1;;;1414:68:13;;3418:2:54;1414:68:13;;;3400:21:54;;;3437:18;;;3430:30;3496:34;3476:18;;;3469:62;3548:18;;1414:68:13;3216:356:54;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:173:54:-;82:20;;-1:-1:-1;;;;;131:31:54;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:54:o;575:254::-;643:6;651;704:2;692:9;683:7;679:23;675:32;672:52;;;720:1;717;710:12;672:52;743:29;762:9;743:29;:::i;:::-;733:39;819:2;804:18;;;;791:32;;-1:-1:-1;;;575:254:54:o;834:328::-;911:6;919;927;980:2;968:9;959:7;955:23;951:32;948:52;;;996:1;993;986:12;948:52;1019:29;1038:9;1019:29;:::i;:::-;1009:39;;1067:38;1101:2;1090:9;1086:18;1067:38;:::i;:::-;1057:48;;1152:2;1141:9;1137:18;1124:32;1114:42;;834:328;;;;;:::o;1167:203::-;-1:-1:-1;;;;;1331:32:54;;;;1313:51;;1301:2;1286:18;;1167:203::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport '@openzeppelin/contracts/access/Ownable.sol';\n\nimport './ICompliance.sol';\n\ncontract DefaultCompliance is ICompliance, Ownable {\n    /// @dev Mapping between agents and their statuses\n    mapping(address => bool) private _tokenAgentsList;\n\n    /// @dev Mapping of tokens linked to the compliance contract\n    mapping(address => bool) private _tokensBound;\n\n    /**\n     *  @dev See {ICompliance-isTokenAgent}.\n     */\n    function isTokenAgent(address _agentAddress) public view override returns (bool) {\n        return (_tokenAgentsList[_agentAddress]);\n    }\n\n    /**\n     *  @dev See {ICompliance-isTokenBound}.\n     */\n    function isTokenBound(address _token) public view override returns (bool) {\n        return (_tokensBound[_token]);\n    }\n\n    /**\n     *  @dev See {ICompliance-addTokenAgent}.\n     */\n    function addTokenAgent(address _agentAddress) external override onlyOwner {\n        require(!_tokenAgentsList[_agentAddress], 'This Agent is already registered');\n        _tokenAgentsList[_agentAddress] = true;\n        emit TokenAgentAdded(_agentAddress);\n    }\n\n    /**\n     *  @dev See {ICompliance-isTokenAgent}.\n     */\n    function removeTokenAgent(address _agentAddress) external override onlyOwner {\n        require(_tokenAgentsList[_agentAddress], 'This Agent is not registered yet');\n        _tokenAgentsList[_agentAddress] = false;\n        emit TokenAgentRemoved(_agentAddress);\n    }\n\n    /**\n     *  @dev See {ICompliance-isTokenAgent}.\n     */\n    function bindToken(address _token) external override onlyOwner {\n        require(!_tokensBound[_token], 'This token is already bound');\n        _tokensBound[_token] = true;\n        emit TokenBound(_token);\n    }\n\n    /**\n     *  @dev See {ICompliance-isTokenAgent}.\n     */\n    function unbindToken(address _token) external override onlyOwner {\n        require(_tokensBound[_token], 'This token is not bound yet');\n        _tokensBound[_token] = false;\n        emit TokenUnbound(_token);\n    }\n\n    /**\n     *  @dev See {ICompliance-canTransfer}.\n     */\n    function canTransfer(\n        address /* _from */,\n        address /* _to */,\n        uint256 /* _value */\n    ) external view override returns (bool) {\n        return true;\n    }\n\n    /**\n     *  @dev See {ICompliance-transferred}.\n     */\n    function transferred(\n        address /* _from */,\n        address /* _to */,\n        uint256 /* _value */\n    ) external override {}\n\n    /**\n     *  @dev See {ICompliance-created}.\n     */\n    function created(address /* _to */, uint256 /* _value */) external override {}\n\n    /**\n     *  @dev See {ICompliance-destroyed}.\n     */\n    function destroyed(address /* _from */, uint256 /* _value */) external override {}\n\n    /**\n     *  @dev See {ICompliance-transferOwnershipOnComplianceContract}.\n     */\n    function transferOwnershipOnComplianceContract(address newOwner) external override onlyOwner {\n        transferOwnership(newOwner);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/compliance/DefaultCompliance.sol",
  "ast": {
    "absolutePath": "project:/contracts/compliance/DefaultCompliance.sol",
    "exportedSymbols": {
      "Context": [
        3401
      ],
      "DefaultCompliance": [
        5489
      ],
      "ICompliance": [
        5596
      ],
      "Ownable": [
        2505
      ]
    },
    "id": 5490,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5270,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1094:23:29"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 5271,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5490,
        "sourceUnit": 2506,
        "src": "1119:52:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/compliance/ICompliance.sol",
        "file": "./ICompliance.sol",
        "id": 5272,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5490,
        "sourceUnit": 5597,
        "src": "1173:27:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 5273,
              "name": "ICompliance",
              "nameLocations": [
                "1232:11:29"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5596,
              "src": "1232:11:29"
            },
            "id": 5274,
            "nodeType": "InheritanceSpecifier",
            "src": "1232:11:29"
          },
          {
            "baseName": {
              "id": 5275,
              "name": "Ownable",
              "nameLocations": [
                "1245:7:29"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2505,
              "src": "1245:7:29"
            },
            "id": 5276,
            "nodeType": "InheritanceSpecifier",
            "src": "1245:7:29"
          }
        ],
        "canonicalName": "DefaultCompliance",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 5489,
        "linearizedBaseContracts": [
          5489,
          2505,
          3401,
          5596
        ],
        "name": "DefaultCompliance",
        "nameLocation": "1211:17:29",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "documentation": {
              "id": 5277,
              "nodeType": "StructuredDocumentation",
              "src": "1259:50:29",
              "text": "@dev Mapping between agents and their statuses"
            },
            "id": 5281,
            "mutability": "mutable",
            "name": "_tokenAgentsList",
            "nameLocation": "1347:16:29",
            "nodeType": "VariableDeclaration",
            "scope": 5489,
            "src": "1314:49:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 5280,
              "keyType": {
                "id": 5278,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1322:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1314:24:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 5279,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1333:4:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "documentation": {
              "id": 5282,
              "nodeType": "StructuredDocumentation",
              "src": "1370:60:29",
              "text": "@dev Mapping of tokens linked to the compliance contract"
            },
            "id": 5286,
            "mutability": "mutable",
            "name": "_tokensBound",
            "nameLocation": "1468:12:29",
            "nodeType": "VariableDeclaration",
            "scope": 5489,
            "src": "1435:45:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 5285,
              "keyType": {
                "id": 5283,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1443:7:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1435:24:29",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 5284,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1454:4:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "private"
          },
          {
            "baseFunctions": [
              5519
            ],
            "body": {
              "id": 5300,
              "nodeType": "Block",
              "src": "1629:57:29",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "baseExpression": {
                          "id": 5295,
                          "name": "_tokenAgentsList",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5281,
                          "src": "1647:16:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 5297,
                        "indexExpression": {
                          "id": 5296,
                          "name": "_agentAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5289,
                          "src": "1664:13:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1647:31:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 5298,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1646:33:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5294,
                  "id": 5299,
                  "nodeType": "Return",
                  "src": "1639:40:29"
                }
              ]
            },
            "documentation": {
              "id": 5287,
              "nodeType": "StructuredDocumentation",
              "src": "1487:56:29",
              "text": "  @dev See {ICompliance-isTokenAgent}."
            },
            "functionSelector": "346531fa",
            "id": 5301,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTokenAgent",
            "nameLocation": "1557:12:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5291,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1605:8:29"
            },
            "parameters": {
              "id": 5290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5289,
                  "mutability": "mutable",
                  "name": "_agentAddress",
                  "nameLocation": "1578:13:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5301,
                  "src": "1570:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5288,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1570:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1569:23:29"
            },
            "returnParameters": {
              "id": 5294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5293,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5301,
                  "src": "1623:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5292,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1623:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1622:6:29"
            },
            "scope": 5489,
            "src": "1548:138:29",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              5527
            ],
            "body": {
              "id": 5315,
              "nodeType": "Block",
              "src": "1827:46:29",
              "statements": [
                {
                  "expression": {
                    "components": [
                      {
                        "baseExpression": {
                          "id": 5310,
                          "name": "_tokensBound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5286,
                          "src": "1845:12:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 5312,
                        "indexExpression": {
                          "id": 5311,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5304,
                          "src": "1858:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "1845:20:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 5313,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "1844:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5309,
                  "id": 5314,
                  "nodeType": "Return",
                  "src": "1837:29:29"
                }
              ]
            },
            "documentation": {
              "id": 5302,
              "nodeType": "StructuredDocumentation",
              "src": "1692:56:29",
              "text": "  @dev See {ICompliance-isTokenBound}."
            },
            "functionSelector": "993e8b95",
            "id": 5316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTokenBound",
            "nameLocation": "1762:12:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5306,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1803:8:29"
            },
            "parameters": {
              "id": 5305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5304,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "1783:6:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1775:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5303,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1775:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1774:16:29"
            },
            "returnParameters": {
              "id": 5309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5308,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5316,
                  "src": "1821:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5307,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1821:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1820:6:29"
            },
            "scope": 5489,
            "src": "1753:120:29",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              5533
            ],
            "body": {
              "id": 5343,
              "nodeType": "Block",
              "src": "2015:187:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5329,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2033:32:29",
                        "subExpression": {
                          "baseExpression": {
                            "id": 5326,
                            "name": "_tokenAgentsList",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5281,
                            "src": "2034:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 5328,
                          "indexExpression": {
                            "id": 5327,
                            "name": "_agentAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5319,
                            "src": "2051:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2034:31:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54686973204167656e7420697320616c72656164792072656769737465726564",
                        "id": 5330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2067:34:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_94e04ceb3646f4f8dc1e8519090d5e6cbdbc2153be960a40dcab924db6e7024c",
                          "typeString": "literal_string \"This Agent is already registered\""
                        },
                        "value": "This Agent is already registered"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_94e04ceb3646f4f8dc1e8519090d5e6cbdbc2153be960a40dcab924db6e7024c",
                          "typeString": "literal_string \"This Agent is already registered\""
                        }
                      ],
                      "id": 5325,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2025:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2025:77:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5332,
                  "nodeType": "ExpressionStatement",
                  "src": "2025:77:29"
                },
                {
                  "expression": {
                    "id": 5337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 5333,
                        "name": "_tokenAgentsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5281,
                        "src": "2112:16:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5335,
                      "indexExpression": {
                        "id": 5334,
                        "name": "_agentAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5319,
                        "src": "2129:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2112:31:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 5336,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2146:4:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2112:38:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5338,
                  "nodeType": "ExpressionStatement",
                  "src": "2112:38:29"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5340,
                        "name": "_agentAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5319,
                        "src": "2181:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5339,
                      "name": "TokenAgentAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5496,
                      "src": "2165:15:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2165:30:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5342,
                  "nodeType": "EmitStatement",
                  "src": "2160:35:29"
                }
              ]
            },
            "documentation": {
              "id": 5317,
              "nodeType": "StructuredDocumentation",
              "src": "1879:57:29",
              "text": "  @dev See {ICompliance-addTokenAgent}."
            },
            "functionSelector": "ff3e6954",
            "id": 5344,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5323,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5322,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "2005:9:29"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "2005:9:29"
                },
                "nodeType": "ModifierInvocation",
                "src": "2005:9:29"
              }
            ],
            "name": "addTokenAgent",
            "nameLocation": "1950:13:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5321,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1996:8:29"
            },
            "parameters": {
              "id": 5320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5319,
                  "mutability": "mutable",
                  "name": "_agentAddress",
                  "nameLocation": "1972:13:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5344,
                  "src": "1964:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1964:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1963:23:29"
            },
            "returnParameters": {
              "id": 5324,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2015:0:29"
            },
            "scope": 5489,
            "src": "1941:261:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5539
            ],
            "body": {
              "id": 5370,
              "nodeType": "Block",
              "src": "2346:189:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 5354,
                          "name": "_tokenAgentsList",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5281,
                          "src": "2364:16:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 5356,
                        "indexExpression": {
                          "id": 5355,
                          "name": "_agentAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5347,
                          "src": "2381:13:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2364:31:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "54686973204167656e74206973206e6f74207265676973746572656420796574",
                        "id": 5357,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2397:34:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_38bfff34683fb8fd7d13833d348fcfd97f4e4308582363f470fc6498e3ad489c",
                          "typeString": "literal_string \"This Agent is not registered yet\""
                        },
                        "value": "This Agent is not registered yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_38bfff34683fb8fd7d13833d348fcfd97f4e4308582363f470fc6498e3ad489c",
                          "typeString": "literal_string \"This Agent is not registered yet\""
                        }
                      ],
                      "id": 5353,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2356:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2356:76:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5359,
                  "nodeType": "ExpressionStatement",
                  "src": "2356:76:29"
                },
                {
                  "expression": {
                    "id": 5364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 5360,
                        "name": "_tokenAgentsList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5281,
                        "src": "2442:16:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5362,
                      "indexExpression": {
                        "id": 5361,
                        "name": "_agentAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5347,
                        "src": "2459:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2442:31:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 5363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2476:5:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "2442:39:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5365,
                  "nodeType": "ExpressionStatement",
                  "src": "2442:39:29"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5367,
                        "name": "_agentAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5347,
                        "src": "2514:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5366,
                      "name": "TokenAgentRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5501,
                      "src": "2496:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2496:32:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5369,
                  "nodeType": "EmitStatement",
                  "src": "2491:37:29"
                }
              ]
            },
            "documentation": {
              "id": 5345,
              "nodeType": "StructuredDocumentation",
              "src": "2208:56:29",
              "text": "  @dev See {ICompliance-isTokenAgent}."
            },
            "functionSelector": "cdde2932",
            "id": 5371,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5351,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5350,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "2336:9:29"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "2336:9:29"
                },
                "nodeType": "ModifierInvocation",
                "src": "2336:9:29"
              }
            ],
            "name": "removeTokenAgent",
            "nameLocation": "2278:16:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5349,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2327:8:29"
            },
            "parameters": {
              "id": 5348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5347,
                  "mutability": "mutable",
                  "name": "_agentAddress",
                  "nameLocation": "2303:13:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5371,
                  "src": "2295:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2295:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2294:23:29"
            },
            "returnParameters": {
              "id": 5352,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2346:0:29"
            },
            "scope": 5489,
            "src": "2269:266:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5545
            ],
            "body": {
              "id": 5398,
              "nodeType": "Block",
              "src": "2665:148:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2683:21:29",
                        "subExpression": {
                          "baseExpression": {
                            "id": 5381,
                            "name": "_tokensBound",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5286,
                            "src": "2684:12:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 5383,
                          "indexExpression": {
                            "id": 5382,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5374,
                            "src": "2697:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2684:20:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5468697320746f6b656e20697320616c726561647920626f756e64",
                        "id": 5385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2706:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8d624724abe04cec2c9dea2aa97d440b8d5ae1d5bee60672fd7f8561ed33045c",
                          "typeString": "literal_string \"This token is already bound\""
                        },
                        "value": "This token is already bound"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8d624724abe04cec2c9dea2aa97d440b8d5ae1d5bee60672fd7f8561ed33045c",
                          "typeString": "literal_string \"This token is already bound\""
                        }
                      ],
                      "id": 5380,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2675:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2675:61:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5387,
                  "nodeType": "ExpressionStatement",
                  "src": "2675:61:29"
                },
                {
                  "expression": {
                    "id": 5392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 5388,
                        "name": "_tokensBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5286,
                        "src": "2746:12:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5390,
                      "indexExpression": {
                        "id": 5389,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5374,
                        "src": "2759:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2746:20:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 5391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2769:4:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2746:27:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5393,
                  "nodeType": "ExpressionStatement",
                  "src": "2746:27:29"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5395,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5374,
                        "src": "2799:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5394,
                      "name": "TokenBound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5506,
                      "src": "2788:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2788:18:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5397,
                  "nodeType": "EmitStatement",
                  "src": "2783:23:29"
                }
              ]
            },
            "documentation": {
              "id": 5372,
              "nodeType": "StructuredDocumentation",
              "src": "2541:56:29",
              "text": "  @dev See {ICompliance-isTokenAgent}."
            },
            "functionSelector": "3ff5aa02",
            "id": 5399,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5378,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5377,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "2655:9:29"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "2655:9:29"
                },
                "nodeType": "ModifierInvocation",
                "src": "2655:9:29"
              }
            ],
            "name": "bindToken",
            "nameLocation": "2611:9:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5376,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2646:8:29"
            },
            "parameters": {
              "id": 5375,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5374,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "2629:6:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5399,
                  "src": "2621:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5373,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2621:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2620:16:29"
            },
            "returnParameters": {
              "id": 5379,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2665:0:29"
            },
            "scope": 5489,
            "src": "2602:211:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5551
            ],
            "body": {
              "id": 5425,
              "nodeType": "Block",
              "src": "2945:150:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 5409,
                          "name": "_tokensBound",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5286,
                          "src": "2963:12:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 5411,
                        "indexExpression": {
                          "id": 5410,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5402,
                          "src": "2976:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2963:20:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5468697320746f6b656e206973206e6f7420626f756e6420796574",
                        "id": 5412,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2985:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a32dea6d728f3e51c5acf0744a2444ea4633c5416095bb4680eff562369b243",
                          "typeString": "literal_string \"This token is not bound yet\""
                        },
                        "value": "This token is not bound yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a32dea6d728f3e51c5acf0744a2444ea4633c5416095bb4680eff562369b243",
                          "typeString": "literal_string \"This token is not bound yet\""
                        }
                      ],
                      "id": 5408,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2955:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5413,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2955:60:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5414,
                  "nodeType": "ExpressionStatement",
                  "src": "2955:60:29"
                },
                {
                  "expression": {
                    "id": 5419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 5415,
                        "name": "_tokensBound",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5286,
                        "src": "3025:12:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5417,
                      "indexExpression": {
                        "id": 5416,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5402,
                        "src": "3038:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3025:20:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 5418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3048:5:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "3025:28:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5420,
                  "nodeType": "ExpressionStatement",
                  "src": "3025:28:29"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 5422,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5402,
                        "src": "3081:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5421,
                      "name": "TokenUnbound",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5511,
                      "src": "3068:12:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3068:20:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5424,
                  "nodeType": "EmitStatement",
                  "src": "3063:25:29"
                }
              ]
            },
            "documentation": {
              "id": 5400,
              "nodeType": "StructuredDocumentation",
              "src": "2819:56:29",
              "text": "  @dev See {ICompliance-isTokenAgent}."
            },
            "functionSelector": "40db3b50",
            "id": 5426,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5406,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5405,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "2935:9:29"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "2935:9:29"
                },
                "nodeType": "ModifierInvocation",
                "src": "2935:9:29"
              }
            ],
            "name": "unbindToken",
            "nameLocation": "2889:11:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5404,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2926:8:29"
            },
            "parameters": {
              "id": 5403,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5402,
                  "mutability": "mutable",
                  "name": "_token",
                  "nameLocation": "2909:6:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5426,
                  "src": "2901:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5401,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2901:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2900:16:29"
            },
            "returnParameters": {
              "id": 5407,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2945:0:29"
            },
            "scope": 5489,
            "src": "2880:215:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5563
            ],
            "body": {
              "id": 5441,
              "nodeType": "Block",
              "src": "3312:28:29",
              "statements": [
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 5439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3329:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 5438,
                  "id": 5440,
                  "nodeType": "Return",
                  "src": "3322:11:29"
                }
              ]
            },
            "documentation": {
              "id": 5427,
              "nodeType": "StructuredDocumentation",
              "src": "3101:55:29",
              "text": "  @dev See {ICompliance-canTransfer}."
            },
            "functionSelector": "e46638e6",
            "id": 5442,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "canTransfer",
            "nameLocation": "3170:11:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5435,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3288:8:29"
            },
            "parameters": {
              "id": 5434,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5429,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5442,
                  "src": "3191:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5428,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3191:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5431,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5442,
                  "src": "3220:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5430,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3220:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5433,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5442,
                  "src": "3247:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5432,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3247:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3181:92:29"
            },
            "returnParameters": {
              "id": 5438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5437,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5442,
                  "src": "3306:4:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5436,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3306:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3305:6:29"
            },
            "scope": 5489,
            "src": "3161:179:29",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5573
            ],
            "body": {
              "id": 5453,
              "nodeType": "Block",
              "src": "3537:2:29",
              "statements": []
            },
            "documentation": {
              "id": 5443,
              "nodeType": "StructuredDocumentation",
              "src": "3346:55:29",
              "text": "  @dev See {ICompliance-transferred}."
            },
            "functionSelector": "8baf29b4",
            "id": 5454,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferred",
            "nameLocation": "3415:11:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5451,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3528:8:29"
            },
            "parameters": {
              "id": 5450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5445,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5454,
                  "src": "3436:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5444,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3436:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5447,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5454,
                  "src": "3465:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3465:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5449,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5454,
                  "src": "3492:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5448,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3492:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3426:92:29"
            },
            "returnParameters": {
              "id": 5452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3537:0:29"
            },
            "scope": 5489,
            "src": "3406:133:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5581
            ],
            "body": {
              "id": 5463,
              "nodeType": "Block",
              "src": "3677:2:29",
              "statements": []
            },
            "documentation": {
              "id": 5455,
              "nodeType": "StructuredDocumentation",
              "src": "3545:51:29",
              "text": "  @dev See {ICompliance-created}."
            },
            "functionSelector": "5f8dead3",
            "id": 5464,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "created",
            "nameLocation": "3610:7:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5461,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3668:8:29"
            },
            "parameters": {
              "id": 5460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5457,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3618:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3618:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5459,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5464,
                  "src": "3637:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3637:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3617:41:29"
            },
            "returnParameters": {
              "id": 5462,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3677:0:29"
            },
            "scope": 5489,
            "src": "3601:78:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5589
            ],
            "body": {
              "id": 5473,
              "nodeType": "Block",
              "src": "3823:2:29",
              "statements": []
            },
            "documentation": {
              "id": 5465,
              "nodeType": "StructuredDocumentation",
              "src": "3685:53:29",
              "text": "  @dev See {ICompliance-destroyed}."
            },
            "functionSelector": "8d2ea772",
            "id": 5474,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "destroyed",
            "nameLocation": "3752:9:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5471,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3814:8:29"
            },
            "parameters": {
              "id": 5470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5467,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5474,
                  "src": "3762:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5466,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3762:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5469,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5474,
                  "src": "3783:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5468,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3783:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3761:43:29"
            },
            "returnParameters": {
              "id": 5472,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3823:0:29"
            },
            "scope": 5489,
            "src": "3743:82:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              5595
            ],
            "body": {
              "id": 5487,
              "nodeType": "Block",
              "src": "4010:44:29",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5484,
                        "name": "newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5477,
                        "src": "4038:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5483,
                      "name": "transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2484,
                      "src": "4020:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 5485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4020:27:29",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5486,
                  "nodeType": "ExpressionStatement",
                  "src": "4020:27:29"
                }
              ]
            },
            "documentation": {
              "id": 5475,
              "nodeType": "StructuredDocumentation",
              "src": "3831:81:29",
              "text": "  @dev See {ICompliance-transferOwnershipOnComplianceContract}."
            },
            "functionSelector": "7bcf0487",
            "id": 5488,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5481,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5480,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "4000:9:29"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "4000:9:29"
                },
                "nodeType": "ModifierInvocation",
                "src": "4000:9:29"
              }
            ],
            "name": "transferOwnershipOnComplianceContract",
            "nameLocation": "3926:37:29",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5479,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3991:8:29"
            },
            "parameters": {
              "id": 5478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5477,
                  "mutability": "mutable",
                  "name": "newOwner",
                  "nameLocation": "3972:8:29",
                  "nodeType": "VariableDeclaration",
                  "scope": 5488,
                  "src": "3964:16:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5476,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3964:7:29",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3963:18:29"
            },
            "returnParameters": {
              "id": 5482,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4010:0:29"
            },
            "scope": 5489,
            "src": "3917:137:29",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 5490,
        "src": "1202:2854:29",
        "usedErrors": []
      }
    ],
    "src": "1094:2963:29"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.355Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "addTokenAgent(address)": {
        "details": "See {ICompliance-addTokenAgent}."
      },
      "bindToken(address)": {
        "details": "See {ICompliance-isTokenAgent}."
      },
      "canTransfer(address,address,uint256)": {
        "details": "See {ICompliance-canTransfer}."
      },
      "created(address,uint256)": {
        "details": "See {ICompliance-created}."
      },
      "destroyed(address,uint256)": {
        "details": "See {ICompliance-destroyed}."
      },
      "isTokenAgent(address)": {
        "details": "See {ICompliance-isTokenAgent}."
      },
      "isTokenBound(address)": {
        "details": "See {ICompliance-isTokenBound}."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "removeTokenAgent(address)": {
        "details": "See {ICompliance-isTokenAgent}."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "transferOwnershipOnComplianceContract(address)": {
        "details": "See {ICompliance-transferOwnershipOnComplianceContract}."
      },
      "transferred(address,address,uint256)": {
        "details": "See {ICompliance-transferred}."
      },
      "unbindToken(address)": {
        "details": "See {ICompliance-isTokenAgent}."
      }
    },
    "stateVariables": {
      "_tokenAgentsList": {
        "details": "Mapping between agents and their statuses"
      },
      "_tokensBound": {
        "details": "Mapping of tokens linked to the compliance contract"
      }
    },
    "version": 1
  },
  "userdoc": {
    "events": {
      "TokenAgentAdded(address)": {
        "notice": "this event is emitted when the Agent has been added on the allowedList of this Compliance.  the event is emitted by the Compliance constructor and by the addTokenAgent function  `_agentAddress` is the address of the Agent to add"
      },
      "TokenAgentRemoved(address)": {
        "notice": "this event is emitted when the Agent has been removed from the agent list of this Compliance.  the event is emitted by the Compliance constructor and by the removeTokenAgent function  `_agentAddress` is the address of the Agent to remove"
      },
      "TokenBound(address)": {
        "notice": "this event is emitted when a token has been bound to the compliance contract  the event is emitted by the bindToken function  `_token` is the address of the token to bind"
      },
      "TokenUnbound(address)": {
        "notice": "this event is emitted when a token has been unbound from the compliance contract  the event is emitted by the unbindToken function  `_token` is the address of the token to unbind"
      }
    },
    "kind": "user",
    "methods": {},
    "version": 1
  }
}