{
  "contractName": "AuthereumENSReverseRegistrar",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        }
      ],
      "name": "resolver",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        }
      ],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        },
        {
          "name": "_label",
          "type": "bytes32"
        },
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "setSubnodeOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        },
        {
          "name": "_ttl",
          "type": "uint64"
        }
      ],
      "name": "setTTL",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        }
      ],
      "name": "ttl",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        },
        {
          "name": "_resolver",
          "type": "address"
        }
      ],
      "name": "setResolver",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_node",
          "type": "bytes32"
        },
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "defaultResolver",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "ensAddr",
          "type": "address"
        },
        {
          "name": "resolverAddr",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_label",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "NewOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_resolver",
          "type": "address"
        }
      ],
      "name": "NewResolver",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_node",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_ttl",
          "type": "uint64"
        }
      ],
      "name": "NewTTL",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "claim",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "owner",
          "type": "address"
        },
        {
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "claimWithResolver",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "node",
      "outputs": [
        {
          "name": "ret",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"},{\"name\":\"_label\",\"type\":\"bytes32\"},{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"},{\"name\":\"_ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"},{\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_node\",\"type\":\"bytes32\"},{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"defaultResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"node\",\"outputs\":[{\"name\":\"ret\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"resolverAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"_label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"_ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claim(address)\":{\"details\":\"Transfers ownership of the reverse ENS record associated with the     calling account.\",\"params\":{\"owner\":\"The address to set as the owner of the reverse record in ENS.\"},\"return\":\"The ENS node hash of the reverse record.\"},\"claimWithResolver(address,address)\":{\"details\":\"Transfers ownership of the reverse ENS record associated with the     calling account.\",\"params\":{\"owner\":\"The address to set as the owner of the reverse record in ENS.\",\"resolver\":\"The address of the resolver to set; 0 to leave unchanged.\"},\"return\":\"The ENS node hash of the reverse record.\"},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"ensAddr\":\"The address of the ENS registry.\",\"resolverAddr\":\"The address of the default reverse resolver.\"}},\"node(address)\":{\"details\":\"Returns the node hash for a given account's reverse records.\",\"params\":{\"addr\":\"The address to hash\"},\"return\":\"The ENS node hash.\"},\"setName(string)\":{\"details\":\"Sets the `name()` record for the reverse ENS record associated with the calling account. First updates the resolver to the default reverse resolver if necessary.\",\"params\":{\"name\":\"The name to set for this address.\"},\"return\":\"The ENS node hash of the reverse record.\"},\"setOwner(bytes32,address)\":{\"params\":{\"_node\":\"The node to transfer ownership of.\",\"_owner\":\"The address of the new owner.\"}},\"setResolver(bytes32,address)\":{\"params\":{\"_node\":\"The node to update.\",\"_resolver\":\"The address of the resolver.\"}},\"setSubnodeOwner(bytes32,bytes32,address)\":{\"params\":{\"_label\":\"The hash of the label specifying the subnode.\",\"_node\":\"The parent node.\",\"_owner\":\"The address of the new owner.\"}},\"setTTL(bytes32,uint64)\":{\"params\":{\"_node\":\"The node to update.\",\"_ttl\":\"The TTL in seconds.\"}}}},\"userdoc\":{\"methods\":{\"owner(bytes32)\":{\"notice\":\"Returns the address that owns the specified node.\"},\"resolver(bytes32)\":{\"notice\":\"Returns the address of the resolver for the specified node.\"},\"setOwner(bytes32,address)\":{\"notice\":\"Transfers ownership of a node to a new address. May only be called by the current owner of the node.\"},\"setResolver(bytes32,address)\":{\"notice\":\"Sets the resolver address for the specified node.\"},\"setSubnodeOwner(bytes32,bytes32,address)\":{\"notice\":\"Transfers ownership of a subnode sha3(node, label) to a new address. May only be called by the owner of the parent node.\"},\"setTTL(bytes32,uint64)\":{\"notice\":\"Sets the TTL for the specified node.\"},\"ttl(bytes32)\":{\"notice\":\"Returns the TTL of a node, and any records associated with it.\"}},\"notice\":\"ENS Reverse registrar test contract.\"}},\"settings\":{\"compilationTarget\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSReverseRegistrar.sol\":\"AuthereumENSReverseRegistrar\"},\"evmVersion\":\"constantinople\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSReverseRegistrar.sol\":{\"keccak256\":\"0xf6fb2feed0527ad072e80cf87a139361a18702960cc580bb27c6af984fa2da64\",\"urls\":[\"bzzr://a264529c4903bd00251df355365a4224d51aaa97a23ed3633234270c18ceb888\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/ens/ENS.sol\":{\"keccak256\":\"0x5d16fc3e0391d797ec23210e235bdfaa56173034d6e2d1f4d671b62b989c5d05\",\"urls\":[\"bzzr://5adfe3f301d2ee7e3c169d7b164e8d6151da7f201ca8294c65120247523986b6\"]},\"/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/test/PublicENSRegistry.sol\":{\"keccak256\":\"0xab2e0b76ca7e7a646725c2e6352091c4b6982b71b7db3a89771ef68db4911c5a\",\"urls\":[\"bzzr://29452769594a31cfbace5c88982de5136de272444bc2585ff0403f8eb4484489\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5060405160408061159c8339810180604052604081101561003057600080fd5b810190808051906020019092919080519060200190929190505050336000808060001b815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050611467806101356000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80631896f70a1161008c5780635b0fc9c3116100665780635b0fc9c314610408578063828eab0e14610456578063bffbe61c146104a0578063c47f0027146104f8576100cf565b80631896f70a146103185780631e83409a146103665780633f15457f146103be576100cf565b80630178b8bf146100d457806302571be31461014257806306ab5923146101b05780630f5a54661461020857806314ab90381461028057806316a25cbd146102c2575b600080fd5b610100600480360360208110156100ea57600080fd5b81019080803590602001909291905050506105c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61016e6004803603602081101561015857600080fd5b8101908080359060200190929190505050610606565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610206600480360360608110156101c657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610645565b005b61026a6004803603604081101561021e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107f2565b6040518082815260200191505060405180910390f35b6102c06004803603604081101561029657600080fd5b8101908080359060200190929190803567ffffffffffffffff169060200190929190505050610d34565b005b6102ee600480360360208110156102d857600080fd5b8101908080359060200190929190505050610e7b565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b6103646004803603604081101561032e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eae565b005b6103a86004803603602081101561037c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611025565b6040518082815260200191505060405180910390f35b6103c6611039565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104546004803603604081101561041e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b005b61045e6111d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e2600480360360208110156104b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fc565b6040518082815260200191505060405180910390f35b6105b16004803603602081101561050e57600080fd5b810190808035906020019064010000000081111561052b57600080fd5b82018360208201111561053d57600080fd5b8035906020019184600183028401116401000000008311171561055f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061125f565b6040518082815260200191505060405180910390f35b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b60008484604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905083857fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38260008083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6000806107fe33611391565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b8260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108cb57600080fd5b505afa1580156108df573d6000803e3d6000fd5b505050506040513d60208110156108f557600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610a1e5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109b357600080fd5b505afa1580156109c7573d6000803e3d6000fd5b505050506040513d60208110156109dd57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610c08573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b4657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015610b2a57600080fd5b505af1158015610b3e573d6000803e3d6000fd5b505050503090505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d2857600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b505050505b81935050505092915050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60006110328260006107f2565b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b827fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b61122b83611391565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b600061128d30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166107f2565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611324578082015181840152602081019050611309565b50505050905090810190601f1680156113515780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561137157600080fd5b505af1158015611385573d6000803e3d6000fd5b50505050809050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b60008111156113ed5760018103905081600f85161a815360108404935060018103905081600f85161a81536010840493506113b7565b60286000209250505091905056fe454e53546573743a2074686973206d6574686f64206e6565647320746f2062652063616c6c656420627920746865206f776e6572206f6620746865206e6f6465a165627a7a72305820f822714b0a839ca6ca63996783bcc21e6ef256cb8d97c4158a520d58b1b50d960029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80631896f70a1161008c5780635b0fc9c3116100665780635b0fc9c314610408578063828eab0e14610456578063bffbe61c146104a0578063c47f0027146104f8576100cf565b80631896f70a146103185780631e83409a146103665780633f15457f146103be576100cf565b80630178b8bf146100d457806302571be31461014257806306ab5923146101b05780630f5a54661461020857806314ab90381461028057806316a25cbd146102c2575b600080fd5b610100600480360360208110156100ea57600080fd5b81019080803590602001909291905050506105c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61016e6004803603602081101561015857600080fd5b8101908080359060200190929190505050610606565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610206600480360360608110156101c657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610645565b005b61026a6004803603604081101561021e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107f2565b6040518082815260200191505060405180910390f35b6102c06004803603604081101561029657600080fd5b8101908080359060200190929190803567ffffffffffffffff169060200190929190505050610d34565b005b6102ee600480360360208110156102d857600080fd5b8101908080359060200190929190505050610e7b565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b6103646004803603604081101561032e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eae565b005b6103a86004803603602081101561037c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611025565b6040518082815260200191505060405180910390f35b6103c6611039565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104546004803603604081101561041e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105f565b005b61045e6111d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e2600480360360208110156104b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111fc565b6040518082815260200191505060405180910390f35b6105b16004803603602081101561050e57600080fd5b810190808035906020019064010000000081111561052b57600080fd5b82018360208201111561053d57600080fd5b8035906020019184600183028401116401000000008311171561055f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061125f565b6040518082815260200191505060405180910390f35b600080600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b823373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b60008484604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905083857fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a38260008083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b6000806107fe33611391565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b8260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108cb57600080fd5b505afa1580156108df573d6000803e3d6000fd5b505050506040513d60208110156108f557600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610a1e5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156109b357600080fd5b505afa1580156109c7573d6000803e3d6000fd5b505050506040513d60208110156109dd57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610c08573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b4657600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015610b2a57600080fd5b505af1158015610b3e573d6000803e3d6000fd5b505050503090505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b158015610bef57600080fd5b505af1158015610c03573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d2857600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b505050505b81935050505092915050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa6883604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050565b600080600083815260200190815260200160002060010160149054906101000a900467ffffffffffffffff169050919050565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60006110328260006107f2565b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b813373ffffffffffffffffffffffffffffffffffffffff1660008083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806113fc6040913960400191505060405180910390fd5b827fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a28160008085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b61122b83611391565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b600061128d30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166107f2565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611324578082015181840152602081019050611309565b50505050905090810190601f1680156113515780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561137157600080fd5b505af1158015611385573d6000803e3d6000fd5b50505050809050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b60008111156113ed5760018103905081600f85161a815360108404935060018103905081600f85161a81536010840493506113b7565b60286000209250505091905056fe454e53546573743a2074686973206d6574686f64206e6565647320746f2062652063616c6c656420627920746865206f776e6572206f6620746865206e6f6465a165627a7a72305820f822714b0a839ca6ca63996783bcc21e6ef256cb8d97c4158a520d58b1b50d960029",
  "sourceMap": "114:3940:7:-;;;578:154;8:9:-1;5:2;;;30:1;27;20:12;5:2;578:154:7;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;578:154:7;;;;;;;;;;;;;;;;;;;;;;;;;1150:10:11;1122:7;:19;1138:1;1130:10;;1122:19;;;;;;;;;;;:25;;;:38;;;;;;;;;;;;;;;;;;664:7:7;646:3;;:26;;;;;;;;;;;;;;;;;;712:12;682:15;;:43;;;;;;;;;;;;;;;;;;578:154;;114:3940;;;;;;",
  "deployedSourceMap": "114:3940:7:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;114:3940:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1439:110:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1439:110:11;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1246:104;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1246:104:11;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2453:261;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2453:261:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1462:875:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1462:875:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3207:145:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3207:145:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1641:99;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1641:99:11;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2886:176;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2886:176:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;999:115:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;999:115:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;342:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1983:158:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1983:158:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;370:34:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3039:149;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3039:149:7;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2656:215;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2656:215:7;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2656:215:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2656:215:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2656:215:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2656:215:7;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1439:110:11;1493:7;1519;:14;1527:5;1519:14;;;;;;;;;;;:23;;;;;;;;;;;;1512:30;;1439:110;;;:::o;1246:104::-;1297:7;1323;:14;1331:5;1323:14;;;;;;;;;;;:20;;;;;;;;;;;;1316:27;;1246:104;;;:::o;2453:261::-;2543:5;933:10;909:34;;:7;:14;917:5;909:14;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;901:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2560:15;2605:5;2612:6;2588:31;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2588:31:11;;;2578:42;;;;;;2560:60;;2651:6;2644:5;2635:31;2659:6;2635:31;;;;;;;;;;;;;;;;;;;;;;2701:6;2676:7;:16;2684:7;2676:16;;;;;;;;;;;:22;;;:31;;;;;;;;;;;;;;;;;;1022:1;2453:261;;;;:::o;1462:875:7:-;1538:7;1557:13;1573:26;1588:10;1573:14;:26::i;:::-;1557:42;;1609:12;269:66;1651:17;;1670:5;1634:42;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1634:42:7;;;1624:53;;;;;;1609:68;;1687:20;1710:3;;;;;;;;;;;:9;;;1720:4;1710:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1710:15:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1710:15:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1710:15:7;;;;;;;;;;;;;;;;1687:38;;1802:1;1782:22;;:8;:22;;;;:65;;;;;1828:3;;;;;;;;;;;:12;;;1841:4;1828:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1828:18:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1828:18:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1828:18:7;;;;;;;;;;;;;;;;1808:39;;:8;:39;;;;1782:65;1779:377;;;1955:4;1931:29;;:12;:29;;;1928:173;;1980:3;;;;;;;;;;;:19;;;269:66;2000:17;;2019:5;2034:4;1980:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1980:60:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1980:60:7;;;;2081:4;2058:28;;1928:173;2114:3;;;;;;;;;;;:15;;;2130:4;2136:8;2114:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2114:31:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2114:31:7;;;;1779:377;2225:5;2209:21;;:12;:21;;;2206:103;;2246:3;;;;;;;;;;;:19;;;269:66;2266:17;;2285:5;2292;2246:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2246:52:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2246:52:7;;;;2206:103;2326:4;2319:11;;;;;1462:875;;;;:::o;3207:145:11:-;3269:5;933:10;909:34;;:7;:14;917:5;909:14;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;901:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3298:5;3291:19;3305:4;3291:19;;;;;;;;;;;;;;;;;;;;;;3341:4;3320:7;:14;3328:5;3320:14;;;;;;;;;;;:18;;;:25;;;;;;;;;;;;;;;;;;3207:145;;;:::o;1641:99::-;1690:6;1715:7;:14;1723:5;1715:14;;;;;;;;;;;:18;;;;;;;;;;;;1708:25;;1641:99;;;:::o;2886:176::-;2959:5;933:10;909:34;;:7;:14;917:5;909:14;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;901:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2993:5;2981:29;3000:9;2981:29;;;;;;;;;;;;;;;;;;;;;;3046:9;3020:7;:14;3028:5;3020:14;;;;;;;;;;;:23;;;:35;;;;;;;;;;;;;;;;;;2886:176;;;:::o;999:115:7:-;1045:7;1071:36;1089:5;1104:1;1071:17;:36::i;:::-;1064:43;;999:115;;;:::o;342:22::-;;;;;;;;;;;;;:::o;1983:158:11:-;2050:5;933:10;909:34;;:7;:14;917:5;909:14;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;901:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2081:5;2072:23;2088:6;2072:23;;;;;;;;;;;;;;;;;;;;;;2128:6;2105:7;:14;2113:5;2105:14;;;;;;;;;;;:20;;;:29;;;;;;;;;;;;;;;;;;1983:158;;;:::o;370:34:7:-;;;;;;;;;;;;;:::o;3039:149::-;3083:11;269:66;3140:17;;3159:20;3174:4;3159:14;:20::i;:::-;3123:57;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3123:57:7;;;3113:68;;;;;;3106:75;;3039:149;;;:::o;2656:215::-;2709:12;2740:58;2766:4;2781:15;;;;;;;;;;;2740:17;:58::i;:::-;2733:65;;2808:15;;;;;;;;;;;:23;;;2832:4;2838;2808:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2808:35:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2808:35:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2808:35:7;;;;2860:4;2853:11;;2656:215;;;:::o;3489:563::-;3544:11;3604:66;3692:2;3708:292;3722:1;3719;3716:8;3708:292;;;3759:1;3756;3752:9;3747:14;;3810:6;3804:3;3798:4;3794:14;3789:28;3786:1;3778:40;3853:4;3847;3843:15;3835:23;;3887:1;3884;3880:9;3875:14;;3938:6;3932:3;3926:4;3922:14;3917:28;3914:1;3906:40;3981:4;3975;3971:15;3963:23;;3708:292;;;4033:2;4030:1;4020:16;4013:23;;3576:470;;;;;:::o",
  "source": "pragma solidity ^0.5.8;\n\nimport \"../test/PublicENSRegistry.sol\";\n\n/**\n * ENS Reverse registrar test contract.\n */\ncontract AuthereumENSReverseRegistrar is ENSReverseRegistrar, PublicENSRegistry {\n    // namehash('addr.reverse')\n    bytes32 constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\n\n    ENSRegistry public ens;\n    ENSResolver public defaultResolver;\n\n    /**\n     * @dev Constructor\n     * @param ensAddr The address of the ENS registry.\n     * @param resolverAddr The address of the default reverse resolver.\n     */\n    constructor(address ensAddr, address resolverAddr) public {\n        ens = ENSRegistry(ensAddr);\n        defaultResolver = ENSResolver(resolverAddr);\n    }\n\n    /**\n     * @dev Transfers ownership of the reverse ENS record associated with the\n     *      calling account.\n     * @param owner The address to set as the owner of the reverse record in ENS.\n     * @return The ENS node hash of the reverse record.\n     */\n    function claim(address owner) public returns (bytes32) {\n        return claimWithResolver(owner, address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the reverse ENS record associated with the\n     *      calling account.\n     * @param owner The address to set as the owner of the reverse record in ENS.\n     * @param resolver The address of the resolver to set; 0 to leave unchanged.\n     * @return The ENS node hash of the reverse record.\n     */\n    function claimWithResolver(address owner, address resolver) public returns (bytes32) {\n        bytes32 label = sha3HexAddress(msg.sender);\n        bytes32 node = keccak256(abi.encodePacked(ADDR_REVERSE_NODE, label));\n        address currentOwner = ens.owner(node);\n\n        // Update the resolver if required\n        if(resolver != address(0) && resolver != address(ens.resolver(node))) {\n            // Transfer the name to us first if it's not already\n            if(currentOwner != address(this)) {\n                ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, address(this));\n                currentOwner = address(this);\n            }\n            ens.setResolver(node, resolver);\n        }\n\n        // Update the owner if required\n        if(currentOwner != owner) {\n            ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, owner);\n        }\n\n        return node;\n    }\n\n    /**\n     * @dev Sets the `name()` record for the reverse ENS record associated with\n     * the calling account. First updates the resolver to the default reverse\n     * resolver if necessary.\n     * @param name The name to set for this address.\n     * @return The ENS node hash of the reverse record.\n     */\n    function setName(string memory name) public returns (bytes32 node) {\n        node = claimWithResolver(address(this), address(defaultResolver));\n        defaultResolver.setName(node, name);\n        return node;\n    }\n\n    /**\n     * @dev Returns the node hash for a given account's reverse records.\n     * @param addr The address to hash\n     * @return The ENS node hash.\n     */\n    function node(address addr) public returns (bytes32 ret) {\n        return keccak256(abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr)));\n    }\n\n    /**\n     * @dev An optimised function to compute the sha3 of the lower-case\n     *      hexadecimal representation of an Ethereum address.\n     * @param addr The address to hash\n     * @return The SHA3 hash of the lower-case hexadecimal encoding of the\n     *         input address.\n     */\n    function sha3HexAddress(address addr) private returns (bytes32 ret) {\n        assembly {\n            let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n            let i := 40\n\n            for { } gt(i, 0) { } {\n                i := sub(i, 1)\n                mstore8(i, byte(and(addr, 0xf), lookup))\n                addr := div(addr, 0x10)\n                i := sub(i, 1)\n                mstore8(i, byte(and(addr, 0xf), lookup))\n                addr := div(addr, 0x10)\n            }\n            ret := keccak256(0, 40)\n        }\n    }\n}",
  "sourcePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSReverseRegistrar.sol",
  "ast": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSReverseRegistrar.sol",
    "exportedSymbols": {
      "AuthereumENSReverseRegistrar": [
        1829
      ]
    },
    "id": 1830,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1631,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/test/PublicENSRegistry.sol",
        "file": "../test/PublicENSRegistry.sol",
        "id": 1632,
        "nodeType": "ImportDirective",
        "scope": 1830,
        "sourceUnit": 2265,
        "src": "25:39:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1633,
              "name": "ENSReverseRegistrar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1943,
              "src": "155:19:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSReverseRegistrar_$1943",
                "typeString": "contract ENSReverseRegistrar"
              }
            },
            "id": 1634,
            "nodeType": "InheritanceSpecifier",
            "src": "155:19:7"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1635,
              "name": "PublicENSRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2264,
              "src": "176:17:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PublicENSRegistry_$2264",
                "typeString": "contract PublicENSRegistry"
              }
            },
            "id": 1636,
            "nodeType": "InheritanceSpecifier",
            "src": "176:17:7"
          }
        ],
        "contractDependencies": [
          1883,
          1943,
          2264
        ],
        "contractKind": "contract",
        "documentation": "ENS Reverse registrar test contract.",
        "fullyImplemented": true,
        "id": 1829,
        "linearizedBaseContracts": [
          1829,
          2264,
          1883,
          1943
        ],
        "name": "AuthereumENSReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 1639,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 1829,
            "src": "232:103:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 1637,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "232:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 1638,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "269:66:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1641,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 1829,
            "src": "342:22:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENSRegistry_$1883",
              "typeString": "contract ENSRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 1640,
              "name": "ENSRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1883,
              "src": "342:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                "typeString": "contract ENSRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1643,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 1829,
            "src": "370:34:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENSResolver_$1912",
              "typeString": "contract ENSResolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 1642,
              "name": "ENSResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1912,
              "src": "370:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSResolver_$1912",
                "typeString": "contract ENSResolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1662,
              "nodeType": "Block",
              "src": "636:96:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1650,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1641,
                      "src": "646:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                        "typeString": "contract ENSRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1652,
                          "name": "ensAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1645,
                          "src": "664:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1651,
                        "name": "ENSRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1883,
                        "src": "652:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ENSRegistry_$1883_$",
                          "typeString": "type(contract ENSRegistry)"
                        }
                      },
                      "id": 1653,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "652:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                        "typeString": "contract ENSRegistry"
                      }
                    },
                    "src": "646:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                      "typeString": "contract ENSRegistry"
                    }
                  },
                  "id": 1655,
                  "nodeType": "ExpressionStatement",
                  "src": "646:26:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1656,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1643,
                      "src": "682:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSResolver_$1912",
                        "typeString": "contract ENSResolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1658,
                          "name": "resolverAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1647,
                          "src": "712:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1657,
                        "name": "ENSResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1912,
                        "src": "700:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ENSResolver_$1912_$",
                          "typeString": "type(contract ENSResolver)"
                        }
                      },
                      "id": 1659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "700:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSResolver_$1912",
                        "typeString": "contract ENSResolver"
                      }
                    },
                    "src": "682:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSResolver_$1912",
                      "typeString": "contract ENSResolver"
                    }
                  },
                  "id": 1661,
                  "nodeType": "ExpressionStatement",
                  "src": "682:43:7"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 1663,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1645,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1663,
                  "src": "590:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1644,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "590:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1647,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1663,
                  "src": "607:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1646,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "607:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "589:39:7"
            },
            "returnParameters": {
              "id": 1649,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "636:0:7"
            },
            "scope": 1829,
            "src": "578:154:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1677,
              "nodeType": "Block",
              "src": "1054:60:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1671,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1665,
                        "src": "1089:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1104:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1096:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1096:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1670,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1773
                      ],
                      "referencedDeclaration": 1773,
                      "src": "1071:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 1675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1071:36:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1669,
                  "id": 1676,
                  "nodeType": "Return",
                  "src": "1064:43:7"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@return The ENS node hash of the reverse record.",
            "id": 1678,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1665,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1678,
                  "src": "1014:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1664,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1014:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1013:15:7"
            },
            "returnParameters": {
              "id": 1669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1668,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1678,
                  "src": "1045:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1667,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1045:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1044:9:7"
            },
            "scope": 1829,
            "src": "999:115:7",
            "stateMutability": "nonpayable",
            "superFunction": 1919,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1772,
              "nodeType": "Block",
              "src": "1547:790:7",
              "statements": [
                {
                  "assignments": [
                    1688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1688,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 1772,
                      "src": "1557:13:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1687,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1557:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1693,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1690,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4696,
                          "src": "1588:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1588:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1689,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1828,
                      "src": "1573:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) returns (bytes32)"
                      }
                    },
                    "id": 1692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1573:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1557:42:7"
                },
                {
                  "assignments": [
                    1695
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1695,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 1772,
                      "src": "1609:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1694,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1609:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1703,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1699,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1639,
                            "src": "1651:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1700,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1688,
                            "src": "1670:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1697,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4683,
                            "src": "1634:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1634:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1634:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1696,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4690,
                      "src": "1624:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1624:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1609:68:7"
                },
                {
                  "assignments": [
                    1705
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1705,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1772,
                      "src": "1687:20:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1704,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1687:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1710,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1708,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1695,
                        "src": "1720:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1706,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1641,
                        "src": "1710:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                          "typeString": "contract ENSRegistry"
                        }
                      },
                      "id": 1707,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1838,
                      "src": "1710:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1710:15:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1687:38:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1724,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1711,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1682,
                        "src": "1782:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1713,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1802:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1794:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1794:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1782:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1723,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1716,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1682,
                        "src": "1808:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1720,
                                "name": "node",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1695,
                                "src": "1841:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1718,
                                "name": "ens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1641,
                                "src": "1828:3:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                  "typeString": "contract ENSRegistry"
                                }
                              },
                              "id": 1719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "resolver",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1845,
                              "src": "1828:12:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view external returns (address)"
                              }
                            },
                            "id": 1721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1828:18:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1820:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1820:27:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "1808:39:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1782:65:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1756,
                  "nodeType": "IfStatement",
                  "src": "1779:377:7",
                  "trueBody": {
                    "id": 1755,
                    "nodeType": "Block",
                    "src": "1849:307:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1725,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1705,
                            "src": "1931:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1727,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4744,
                                "src": "1955:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                  "typeString": "contract AuthereumENSReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                  "typeString": "contract AuthereumENSReverseRegistrar"
                                }
                              ],
                              "id": 1726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1947:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 1728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1947:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1931:29:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1747,
                        "nodeType": "IfStatement",
                        "src": "1928:173:7",
                        "trueBody": {
                          "id": 1746,
                          "nodeType": "Block",
                          "src": "1962:139:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1733,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1639,
                                    "src": "2000:17:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1734,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1688,
                                    "src": "2019:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1736,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4744,
                                        "src": "2034:4:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                          "typeString": "contract AuthereumENSReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                          "typeString": "contract AuthereumENSReverseRegistrar"
                                        }
                                      ],
                                      "id": 1735,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2026:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 1737,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2026:13:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1730,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1641,
                                    "src": "1980:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                      "typeString": "contract ENSRegistry"
                                    }
                                  },
                                  "id": 1732,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1868,
                                  "src": "1980:19:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,bytes32,address) external"
                                  }
                                },
                                "id": 1738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1980:60:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1739,
                              "nodeType": "ExpressionStatement",
                              "src": "1980:60:7"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1744,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1740,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1705,
                                  "src": "2058:12:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1742,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4744,
                                      "src": "2081:4:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                        "typeString": "contract AuthereumENSReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                        "typeString": "contract AuthereumENSReverseRegistrar"
                                      }
                                    ],
                                    "id": 1741,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2073:7:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 1743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2073:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2058:28:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1745,
                              "nodeType": "ExpressionStatement",
                              "src": "2058:28:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1751,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1695,
                              "src": "2130:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1752,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1682,
                              "src": "2136:8:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1748,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1641,
                              "src": "2114:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                "typeString": "contract ENSRegistry"
                              }
                            },
                            "id": 1750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1875,
                            "src": "2114:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 1753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2114:31:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1754,
                        "nodeType": "ExpressionStatement",
                        "src": "2114:31:7"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1757,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1705,
                      "src": "2209:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1758,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1680,
                      "src": "2225:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2209:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1769,
                  "nodeType": "IfStatement",
                  "src": "2206:103:7",
                  "trueBody": {
                    "id": 1768,
                    "nodeType": "Block",
                    "src": "2232:77:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1763,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1639,
                              "src": "2266:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1764,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1688,
                              "src": "2285:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1765,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1680,
                              "src": "2292:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1760,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1641,
                              "src": "2246:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                "typeString": "contract ENSRegistry"
                              }
                            },
                            "id": 1762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1868,
                            "src": "2246:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 1766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2246:52:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1767,
                        "nodeType": "ExpressionStatement",
                        "src": "2246:52:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1770,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1695,
                    "src": "2326:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1686,
                  "id": 1771,
                  "nodeType": "Return",
                  "src": "2319:11:7"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@param resolver The address of the resolver to set; 0 to leave unchanged.\n@return The ENS node hash of the reverse record.",
            "id": 1773,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1680,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1773,
                  "src": "1489:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1679,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1489:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1682,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1773,
                  "src": "1504:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1681,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1504:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1488:33:7"
            },
            "returnParameters": {
              "id": 1686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1685,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1773,
                  "src": "1538:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1684,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1538:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1537:9:7"
            },
            "scope": 1829,
            "src": "1462:875:7",
            "stateMutability": "nonpayable",
            "superFunction": 1928,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1800,
              "nodeType": "Block",
              "src": "2723:148:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1780,
                      "name": "node",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1778,
                      "src": "2733:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1783,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4744,
                              "src": "2766:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                "typeString": "contract AuthereumENSReverseRegistrar"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                "typeString": "contract AuthereumENSReverseRegistrar"
                              }
                            ],
                            "id": 1782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2758:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2758:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1786,
                              "name": "defaultResolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1643,
                              "src": "2781:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENSResolver_$1912",
                                "typeString": "contract ENSResolver"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ENSResolver_$1912",
                                "typeString": "contract ENSResolver"
                              }
                            ],
                            "id": 1785,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2773:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2773:24:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1781,
                        "name": "claimWithResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1773
                        ],
                        "referencedDeclaration": 1773,
                        "src": "2740:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address,address) returns (bytes32)"
                        }
                      },
                      "id": 1788,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2740:58:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2733:65:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1790,
                  "nodeType": "ExpressionStatement",
                  "src": "2733:65:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1794,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1778,
                        "src": "2832:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1775,
                        "src": "2838:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1791,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1643,
                        "src": "2808:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSResolver_$1912",
                          "typeString": "contract ENSResolver"
                        }
                      },
                      "id": 1793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1911,
                      "src": "2808:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2808:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1797,
                  "nodeType": "ExpressionStatement",
                  "src": "2808:35:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1798,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1778,
                    "src": "2860:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1779,
                  "id": 1799,
                  "nodeType": "Return",
                  "src": "2853:11:7"
                }
              ]
            },
            "documentation": "@dev Sets the `name()` record for the reverse ENS record associated with\nthe calling account. First updates the resolver to the default reverse\nresolver if necessary.\n@param name The name to set for this address.\n@return The ENS node hash of the reverse record.",
            "id": 1801,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1775,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "2673:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1774,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2673:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2672:20:7"
            },
            "returnParameters": {
              "id": 1779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1778,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "2709:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1777,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2708:14:7"
            },
            "scope": 1829,
            "src": "2656:215:7",
            "stateMutability": "nonpayable",
            "superFunction": 1935,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1818,
              "nodeType": "Block",
              "src": "3096:92:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1811,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1639,
                            "src": "3140:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1813,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1803,
                                "src": "3174:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1812,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1828,
                              "src": "3159:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) returns (bytes32)"
                              }
                            },
                            "id": 1814,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3159:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1809,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4683,
                            "src": "3123:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3123:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3123:57:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1808,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4690,
                      "src": "3113:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3113:68:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1807,
                  "id": 1817,
                  "nodeType": "Return",
                  "src": "3106:75:7"
                }
              ]
            },
            "documentation": "@dev Returns the node hash for a given account's reverse records.\n@param addr The address to hash\n@return The ENS node hash.",
            "id": 1819,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1803,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1819,
                  "src": "3053:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3053:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3052:14:7"
            },
            "returnParameters": {
              "id": 1807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1806,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1819,
                  "src": "3083:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1805,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3083:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3082:13:7"
            },
            "scope": 1829,
            "src": "3039:149:7",
            "stateMutability": "nonpayable",
            "superFunction": 1942,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1827,
              "nodeType": "Block",
              "src": "3557:495:7",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 1824,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4013:3:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3835:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3963:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3847:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3798:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3975:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3926:4:7",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1826,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    let i := 40\n    for {\n    }\n    gt(i, 0)\n    {\n    }\n    {\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n    }\n    ret := keccak256(0, 40)\n}",
                  "src": "3567:479:7"
                }
              ]
            },
            "documentation": "@dev An optimised function to compute the sha3 of the lower-case\n     hexadecimal representation of an Ethereum address.\n@param addr The address to hash\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\n        input address.",
            "id": 1828,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1821,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1828,
                  "src": "3513:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1820,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3513:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3512:14:7"
            },
            "returnParameters": {
              "id": 1825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1824,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1828,
                  "src": "3544:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1823,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3544:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3543:13:7"
            },
            "scope": 1829,
            "src": "3489:563:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 1830,
        "src": "114:3940:7"
      }
    ],
    "src": "0:4054:7"
  },
  "legacyAST": {
    "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/ens/AuthereumENSReverseRegistrar.sol",
    "exportedSymbols": {
      "AuthereumENSReverseRegistrar": [
        1829
      ]
    },
    "id": 1830,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1631,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".8"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:7"
      },
      {
        "absolutePath": "/Users/sh/Dev/clients/0trust/authereum/monorepo/packages/contracts/contracts/test/PublicENSRegistry.sol",
        "file": "../test/PublicENSRegistry.sol",
        "id": 1632,
        "nodeType": "ImportDirective",
        "scope": 1830,
        "sourceUnit": 2265,
        "src": "25:39:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1633,
              "name": "ENSReverseRegistrar",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1943,
              "src": "155:19:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSReverseRegistrar_$1943",
                "typeString": "contract ENSReverseRegistrar"
              }
            },
            "id": 1634,
            "nodeType": "InheritanceSpecifier",
            "src": "155:19:7"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1635,
              "name": "PublicENSRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2264,
              "src": "176:17:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PublicENSRegistry_$2264",
                "typeString": "contract PublicENSRegistry"
              }
            },
            "id": 1636,
            "nodeType": "InheritanceSpecifier",
            "src": "176:17:7"
          }
        ],
        "contractDependencies": [
          1883,
          1943,
          2264
        ],
        "contractKind": "contract",
        "documentation": "ENS Reverse registrar test contract.",
        "fullyImplemented": true,
        "id": 1829,
        "linearizedBaseContracts": [
          1829,
          2264,
          1883,
          1943
        ],
        "name": "AuthereumENSReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 1639,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 1829,
            "src": "232:103:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 1637,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "232:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 1638,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "269:66:7",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 1641,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 1829,
            "src": "342:22:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENSRegistry_$1883",
              "typeString": "contract ENSRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 1640,
              "name": "ENSRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1883,
              "src": "342:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                "typeString": "contract ENSRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1643,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 1829,
            "src": "370:34:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENSResolver_$1912",
              "typeString": "contract ENSResolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 1642,
              "name": "ENSResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1912,
              "src": "370:11:7",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENSResolver_$1912",
                "typeString": "contract ENSResolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1662,
              "nodeType": "Block",
              "src": "636:96:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1650,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1641,
                      "src": "646:3:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                        "typeString": "contract ENSRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1652,
                          "name": "ensAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1645,
                          "src": "664:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1651,
                        "name": "ENSRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1883,
                        "src": "652:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ENSRegistry_$1883_$",
                          "typeString": "type(contract ENSRegistry)"
                        }
                      },
                      "id": 1653,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "652:20:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                        "typeString": "contract ENSRegistry"
                      }
                    },
                    "src": "646:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                      "typeString": "contract ENSRegistry"
                    }
                  },
                  "id": 1655,
                  "nodeType": "ExpressionStatement",
                  "src": "646:26:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1656,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1643,
                      "src": "682:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSResolver_$1912",
                        "typeString": "contract ENSResolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1658,
                          "name": "resolverAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1647,
                          "src": "712:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1657,
                        "name": "ENSResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1912,
                        "src": "700:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ENSResolver_$1912_$",
                          "typeString": "type(contract ENSResolver)"
                        }
                      },
                      "id": 1659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "700:25:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENSResolver_$1912",
                        "typeString": "contract ENSResolver"
                      }
                    },
                    "src": "682:43:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENSResolver_$1912",
                      "typeString": "contract ENSResolver"
                    }
                  },
                  "id": 1661,
                  "nodeType": "ExpressionStatement",
                  "src": "682:43:7"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 1663,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1645,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1663,
                  "src": "590:15:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1644,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "590:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1647,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1663,
                  "src": "607:20:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1646,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "607:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "589:39:7"
            },
            "returnParameters": {
              "id": 1649,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "636:0:7"
            },
            "scope": 1829,
            "src": "578:154:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1677,
              "nodeType": "Block",
              "src": "1054:60:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1671,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1665,
                        "src": "1089:5:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1104:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1096:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1096:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1670,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1773
                      ],
                      "referencedDeclaration": 1773,
                      "src": "1071:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 1675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1071:36:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1669,
                  "id": 1676,
                  "nodeType": "Return",
                  "src": "1064:43:7"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@return The ENS node hash of the reverse record.",
            "id": 1678,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1665,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1678,
                  "src": "1014:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1664,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1014:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1013:15:7"
            },
            "returnParameters": {
              "id": 1669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1668,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1678,
                  "src": "1045:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1667,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1045:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1044:9:7"
            },
            "scope": 1829,
            "src": "999:115:7",
            "stateMutability": "nonpayable",
            "superFunction": 1919,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1772,
              "nodeType": "Block",
              "src": "1547:790:7",
              "statements": [
                {
                  "assignments": [
                    1688
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1688,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 1772,
                      "src": "1557:13:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1687,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1557:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1693,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1690,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4696,
                          "src": "1588:3:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1588:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1689,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1828,
                      "src": "1573:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) returns (bytes32)"
                      }
                    },
                    "id": 1692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1573:26:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1557:42:7"
                },
                {
                  "assignments": [
                    1695
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1695,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 1772,
                      "src": "1609:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1694,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1609:7:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1703,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1699,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1639,
                            "src": "1651:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1700,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1688,
                            "src": "1670:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1697,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4683,
                            "src": "1634:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1634:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1634:42:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1696,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4690,
                      "src": "1624:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1624:53:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1609:68:7"
                },
                {
                  "assignments": [
                    1705
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1705,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 1772,
                      "src": "1687:20:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1704,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1687:7:7",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1710,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1708,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1695,
                        "src": "1720:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1706,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1641,
                        "src": "1710:3:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                          "typeString": "contract ENSRegistry"
                        }
                      },
                      "id": 1707,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1838,
                      "src": "1710:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 1709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1710:15:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1687:38:7"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1724,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1711,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1682,
                        "src": "1782:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1713,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1802:1:7",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 1712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1794:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1794:10:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1782:22:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 1723,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 1716,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1682,
                        "src": "1808:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1720,
                                "name": "node",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1695,
                                "src": "1841:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 1718,
                                "name": "ens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1641,
                                "src": "1828:3:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                  "typeString": "contract ENSRegistry"
                                }
                              },
                              "id": 1719,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "resolver",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1845,
                              "src": "1828:12:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                                "typeString": "function (bytes32) view external returns (address)"
                              }
                            },
                            "id": 1721,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1828:18:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1820:7:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 1722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1820:27:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "1808:39:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1782:65:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1756,
                  "nodeType": "IfStatement",
                  "src": "1779:377:7",
                  "trueBody": {
                    "id": 1755,
                    "nodeType": "Block",
                    "src": "1849:307:7",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1725,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1705,
                            "src": "1931:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1727,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4744,
                                "src": "1955:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                  "typeString": "contract AuthereumENSReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                  "typeString": "contract AuthereumENSReverseRegistrar"
                                }
                              ],
                              "id": 1726,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1947:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 1728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1947:13:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1931:29:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1747,
                        "nodeType": "IfStatement",
                        "src": "1928:173:7",
                        "trueBody": {
                          "id": 1746,
                          "nodeType": "Block",
                          "src": "1962:139:7",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1733,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1639,
                                    "src": "2000:17:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1734,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1688,
                                    "src": "2019:5:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1736,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4744,
                                        "src": "2034:4:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                          "typeString": "contract AuthereumENSReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                          "typeString": "contract AuthereumENSReverseRegistrar"
                                        }
                                      ],
                                      "id": 1735,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2026:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 1737,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2026:13:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1730,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1641,
                                    "src": "1980:3:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                      "typeString": "contract ENSRegistry"
                                    }
                                  },
                                  "id": 1732,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1868,
                                  "src": "1980:19:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,bytes32,address) external"
                                  }
                                },
                                "id": 1738,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1980:60:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1739,
                              "nodeType": "ExpressionStatement",
                              "src": "1980:60:7"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1744,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1740,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1705,
                                  "src": "2058:12:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1742,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4744,
                                      "src": "2081:4:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                        "typeString": "contract AuthereumENSReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                        "typeString": "contract AuthereumENSReverseRegistrar"
                                      }
                                    ],
                                    "id": 1741,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2073:7:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 1743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2073:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2058:28:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 1745,
                              "nodeType": "ExpressionStatement",
                              "src": "2058:28:7"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1751,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1695,
                              "src": "2130:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1752,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1682,
                              "src": "2136:8:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1748,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1641,
                              "src": "2114:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                "typeString": "contract ENSRegistry"
                              }
                            },
                            "id": 1750,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1875,
                            "src": "2114:15:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 1753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2114:31:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1754,
                        "nodeType": "ExpressionStatement",
                        "src": "2114:31:7"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1757,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1705,
                      "src": "2209:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 1758,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1680,
                      "src": "2225:5:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2209:21:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1769,
                  "nodeType": "IfStatement",
                  "src": "2206:103:7",
                  "trueBody": {
                    "id": 1768,
                    "nodeType": "Block",
                    "src": "2232:77:7",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1763,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1639,
                              "src": "2266:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1764,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1688,
                              "src": "2285:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1765,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1680,
                              "src": "2292:5:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1760,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1641,
                              "src": "2246:3:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENSRegistry_$1883",
                                "typeString": "contract ENSRegistry"
                              }
                            },
                            "id": 1762,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1868,
                            "src": "2246:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 1766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2246:52:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1767,
                        "nodeType": "ExpressionStatement",
                        "src": "2246:52:7"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1770,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1695,
                    "src": "2326:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1686,
                  "id": 1771,
                  "nodeType": "Return",
                  "src": "2319:11:7"
                }
              ]
            },
            "documentation": "@dev Transfers ownership of the reverse ENS record associated with the\n     calling account.\n@param owner The address to set as the owner of the reverse record in ENS.\n@param resolver The address of the resolver to set; 0 to leave unchanged.\n@return The ENS node hash of the reverse record.",
            "id": 1773,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1680,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 1773,
                  "src": "1489:13:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1679,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1489:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1682,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 1773,
                  "src": "1504:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1681,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1504:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1488:33:7"
            },
            "returnParameters": {
              "id": 1686,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1685,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1773,
                  "src": "1538:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1684,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1538:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1537:9:7"
            },
            "scope": 1829,
            "src": "1462:875:7",
            "stateMutability": "nonpayable",
            "superFunction": 1928,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1800,
              "nodeType": "Block",
              "src": "2723:148:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1780,
                      "name": "node",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1778,
                      "src": "2733:4:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1783,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4744,
                              "src": "2766:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                "typeString": "contract AuthereumENSReverseRegistrar"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_AuthereumENSReverseRegistrar_$1829",
                                "typeString": "contract AuthereumENSReverseRegistrar"
                              }
                            ],
                            "id": 1782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2758:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2758:13:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1786,
                              "name": "defaultResolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1643,
                              "src": "2781:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENSResolver_$1912",
                                "typeString": "contract ENSResolver"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ENSResolver_$1912",
                                "typeString": "contract ENSResolver"
                              }
                            ],
                            "id": 1785,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2773:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 1787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2773:24:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1781,
                        "name": "claimWithResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1773
                        ],
                        "referencedDeclaration": 1773,
                        "src": "2740:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address,address) returns (bytes32)"
                        }
                      },
                      "id": 1788,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2740:58:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2733:65:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 1790,
                  "nodeType": "ExpressionStatement",
                  "src": "2733:65:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1794,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1778,
                        "src": "2832:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1775,
                        "src": "2838:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1791,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1643,
                        "src": "2808:15:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENSResolver_$1912",
                          "typeString": "contract ENSResolver"
                        }
                      },
                      "id": 1793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1911,
                      "src": "2808:23:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2808:35:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1797,
                  "nodeType": "ExpressionStatement",
                  "src": "2808:35:7"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1798,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1778,
                    "src": "2860:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1779,
                  "id": 1799,
                  "nodeType": "Return",
                  "src": "2853:11:7"
                }
              ]
            },
            "documentation": "@dev Sets the `name()` record for the reverse ENS record associated with\nthe calling account. First updates the resolver to the default reverse\nresolver if necessary.\n@param name The name to set for this address.\n@return The ENS node hash of the reverse record.",
            "id": 1801,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1775,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "2673:18:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1774,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2673:6:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2672:20:7"
            },
            "returnParameters": {
              "id": 1779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1778,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 1801,
                  "src": "2709:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1777,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2708:14:7"
            },
            "scope": 1829,
            "src": "2656:215:7",
            "stateMutability": "nonpayable",
            "superFunction": 1935,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1818,
              "nodeType": "Block",
              "src": "3096:92:7",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1811,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1639,
                            "src": "3140:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1813,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1803,
                                "src": "3174:4:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 1812,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1828,
                              "src": "3159:14:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) returns (bytes32)"
                              }
                            },
                            "id": 1814,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3159:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1809,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4683,
                            "src": "3123:3:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3123:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1815,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3123:57:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1808,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4690,
                      "src": "3113:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3113:68:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1807,
                  "id": 1817,
                  "nodeType": "Return",
                  "src": "3106:75:7"
                }
              ]
            },
            "documentation": "@dev Returns the node hash for a given account's reverse records.\n@param addr The address to hash\n@return The ENS node hash.",
            "id": 1819,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1803,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1819,
                  "src": "3053:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3053:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3052:14:7"
            },
            "returnParameters": {
              "id": 1807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1806,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1819,
                  "src": "3083:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1805,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3083:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3082:13:7"
            },
            "scope": 1829,
            "src": "3039:149:7",
            "stateMutability": "nonpayable",
            "superFunction": 1942,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1827,
              "nodeType": "Block",
              "src": "3557:495:7",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 1824,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4013:3:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3835:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3963:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3847:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3798:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3975:4:7",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 1821,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3926:4:7",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 1826,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    let i := 40\n    for {\n    }\n    gt(i, 0)\n    {\n    }\n    {\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n    }\n    ret := keccak256(0, 40)\n}",
                  "src": "3567:479:7"
                }
              ]
            },
            "documentation": "@dev An optimised function to compute the sha3 of the lower-case\n     hexadecimal representation of an Ethereum address.\n@param addr The address to hash\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\n        input address.",
            "id": 1828,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1821,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 1828,
                  "src": "3513:12:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1820,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3513:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3512:14:7"
            },
            "returnParameters": {
              "id": 1825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1824,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1828,
                  "src": "3544:11:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1823,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3544:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3543:13:7"
            },
            "scope": 1829,
            "src": "3489:563:7",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 1830,
        "src": "114:3940:7"
      }
    ],
    "src": "0:4054:7"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-07-09T03:45:29.418Z",
  "devdoc": {
    "methods": {
      "claim(address)": {
        "details": "Transfers ownership of the reverse ENS record associated with the     calling account.",
        "params": {
          "owner": "The address to set as the owner of the reverse record in ENS."
        },
        "return": "The ENS node hash of the reverse record."
      },
      "claimWithResolver(address,address)": {
        "details": "Transfers ownership of the reverse ENS record associated with the     calling account.",
        "params": {
          "owner": "The address to set as the owner of the reverse record in ENS.",
          "resolver": "The address of the resolver to set; 0 to leave unchanged."
        },
        "return": "The ENS node hash of the reverse record."
      },
      "constructor": {
        "details": "Constructor",
        "params": {
          "ensAddr": "The address of the ENS registry.",
          "resolverAddr": "The address of the default reverse resolver."
        }
      },
      "node(address)": {
        "details": "Returns the node hash for a given account's reverse records.",
        "params": {
          "addr": "The address to hash"
        },
        "return": "The ENS node hash."
      },
      "setName(string)": {
        "details": "Sets the `name()` record for the reverse ENS record associated with the calling account. First updates the resolver to the default reverse resolver if necessary.",
        "params": {
          "name": "The name to set for this address."
        },
        "return": "The ENS node hash of the reverse record."
      },
      "setOwner(bytes32,address)": {
        "params": {
          "_node": "The node to transfer ownership of.",
          "_owner": "The address of the new owner."
        }
      },
      "setResolver(bytes32,address)": {
        "params": {
          "_node": "The node to update.",
          "_resolver": "The address of the resolver."
        }
      },
      "setSubnodeOwner(bytes32,bytes32,address)": {
        "params": {
          "_label": "The hash of the label specifying the subnode.",
          "_node": "The parent node.",
          "_owner": "The address of the new owner."
        }
      },
      "setTTL(bytes32,uint64)": {
        "params": {
          "_node": "The node to update.",
          "_ttl": "The TTL in seconds."
        }
      }
    }
  },
  "userdoc": {
    "methods": {
      "owner(bytes32)": {
        "notice": "Returns the address that owns the specified node."
      },
      "resolver(bytes32)": {
        "notice": "Returns the address of the resolver for the specified node."
      },
      "setOwner(bytes32,address)": {
        "notice": "Transfers ownership of a node to a new address. May only be called by the current owner of the node."
      },
      "setResolver(bytes32,address)": {
        "notice": "Sets the resolver address for the specified node."
      },
      "setSubnodeOwner(bytes32,bytes32,address)": {
        "notice": "Transfers ownership of a subnode sha3(node, label) to a new address. May only be called by the owner of the parent node."
      },
      "setTTL(bytes32,uint64)": {
        "notice": "Sets the TTL for the specified node."
      },
      "ttl(bytes32)": {
        "notice": "Returns the TTL of a node, and any records associated with it."
      }
    },
    "notice": "ENS Reverse registrar test contract."
  }
}