{
  "contractName": "ReverseRegistrar",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ENS",
          "name": "ensAddr",
          "type": "address"
        },
        {
          "internalType": "contract NameResolver",
          "name": "resolverAddr",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ADDR_REVERSE_NODE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "defaultResolver",
      "outputs": [
        {
          "internalType": "contract NameResolver",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "internalType": "contract ENS",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "claim",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "claimWithResolver",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "node",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ENS\",\"name\":\"ensAddr\",\"type\":\"address\"},{\"internalType\":\"contract NameResolver\",\"name\":\"resolverAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDR_REVERSE_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"defaultResolver\",\"outputs\":[{\"internalType\":\"contract NameResolver\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"internalType\":\"contract ENS\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"node\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"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.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/makoto/work/ens/ens/contracts/ReverseRegistrar.sol\":\"ReverseRegistrar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/makoto/work/ens/ens/contracts/ENS.sol\":{\"keccak256\":\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\",\"urls\":[\"bzz-raw://b3de1882a4a1a1b13c27ee6dc04cc58c34ac392c80cad507de2cdfa8c02712fe\",\"dweb:/ipfs/QmeKcaBF8QdJjXiqFrPJkAtK3et5kUL8XJrnHjwhAThRMT\"]},\"/Users/makoto/work/ens/ens/contracts/ReverseRegistrar.sol\":{\"keccak256\":\"0x9c9d6e34ff144e8df8e7ae290a5c9a28437bf0f97f0fcf1cdce371260914c3ba\",\"urls\":[\"bzz-raw://433e7a35db75f7156263a40786522cf20ad374df6fd2ad8a872e62520334116e\",\"dweb:/ipfs/Qmf6TX1oXrAT8yUET77DbpWRM8jYxtr3NCCMypwVVZTfLW\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50604051610e11380380610e118339818101604052604081101561003357600080fd5b810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561016657600080fd5b505afa15801561017a573d6000803e3d6000fd5b505050506040513d602081101561019057600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610293578073ffffffffffffffffffffffffffffffffffffffff16631e83409a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050506040513d602081101561028057600080fd5b8101908080519060200190929190505050505b505050610b6c806102a56000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80637cf8a2eb1161005b5780637cf8a2eb1461019c578063828eab0e146101ba578063bffbe61c14610204578063c47f00271461025c5761007d565b80630f5a5466146100825780631e83409a146100fa5780633f15457f14610152575b600080fd5b6100e46004803603604081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061032b565b6040518082815260200191505060405180910390f35b61013c6004803603602081101561011057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108b0565b6040518082815260200191505060405180910390f35b61015a6108c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a46108e9565b6040518082815260200191505060405180910390f35b6101c2610910565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102466004803603602081101561021a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610936565b6040518082815260200191505060405180910390f35b6103156004803603602081101561027257600080fd5b810190808035906020019064010000000081111561028f57600080fd5b8201836020820111156102a157600080fd5b803590602001918460018302840111640100000000831117156102c357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610999565b6040518082815260200191505060405180910390f35b60008061033733610acd565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b82604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d602081101561042d57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561055557506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156104ea57600080fd5b505afa1580156104fe573d6000803e3d6000fd5b505050506040513d602081101561051457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610761573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050506040513d602081101561068a57600080fd5b8101908080519060200190929190505050503090505b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108a4576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561086757600080fd5b505af115801561087b573d6000803e3d6000fd5b505050506040513d602081101561089157600080fd5b8101908080519060200190929190505050505b81935050505092915050565b60006108bd82600061032b565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b61096583610acd565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000806109c830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661032b565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a5f578082015181840152602081019050610a44565b50505050905090810190601f168015610a8c5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610aac57600080fd5b505af1158015610ac0573d6000803e3d6000fd5b5050505080915050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b6000811115610b295760018103905081600f85161a815360108404935060018103905081600f85161a8153601084049350610af3565b50602860002091505091905056fea265627a7a723158203c3a1e43dd29f27c43ee396cdbe4b2cee2e5b8b0cee99aecdde9c3342eea702264736f6c63430005100032",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80637cf8a2eb1161005b5780637cf8a2eb1461019c578063828eab0e146101ba578063bffbe61c14610204578063c47f00271461025c5761007d565b80630f5a5466146100825780631e83409a146100fa5780633f15457f14610152575b600080fd5b6100e46004803603604081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061032b565b6040518082815260200191505060405180910390f35b61013c6004803603602081101561011057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108b0565b6040518082815260200191505060405180910390f35b61015a6108c4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a46108e9565b6040518082815260200191505060405180910390f35b6101c2610910565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102466004803603602081101561021a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610936565b6040518082815260200191505060405180910390f35b6103156004803603602081101561027257600080fd5b810190808035906020019064010000000081111561028f57600080fd5b8201836020820111156102a157600080fd5b803590602001918460018302840111640100000000831117156102c357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610999565b6040518082815260200191505060405180910390f35b60008061033733610acd565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b82604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d602081101561042d57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561055557506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156104ea57600080fd5b505afa1580156104fe573d6000803e3d6000fd5b505050506040513d602081101561051457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610761573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a0576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050506040513d602081101561068a57600080fd5b8101908080519060200190929190505050503090505b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108a4576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561086757600080fd5b505af115801561087b573d6000803e3d6000fd5b505050506040513d602081101561089157600080fd5b8101908080519060200190929190505050505b81935050505092915050565b60006108bd82600061032b565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b61096583610acd565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000806109c830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661032b565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a5f578082015181840152602081019050610a44565b50505050905090810190601f168015610a8c5780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610aac57600080fd5b505af1158015610ac0573d6000803e3d6000fd5b5050505080915050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b6000811115610b295760018103905081600f85161a815360108404935060018103905081600f85161a8153601084049350610af3565b50602860002091505091905056fea265627a7a723158203c3a1e43dd29f27c43ee396cdbe4b2cee2e5b8b0cee99aecdde9c3342eea702264736f6c63430005100032",
  "sourceMap": "136:4188:9:-;;;546:391;8:9:-1;5:2;;;30:1;27;20:12;5:2;546:391:9;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;546:391:9;;;;;;;;;;;;;;;;;;;;;;;;;621:7;615:3;;:13;;;;;;;;;;;;;;;;;;656:12;638:15;;:30;;;;;;;;;;;;;;;;;;745:29;794:3;;;;;;;;;;;:9;;;244:66;804:17;;794:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;794:28:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;794:28:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;794:28:9;;;;;;;;;;;;;;;;745:78;;870:3;837:37;;845:12;837:37;;;833:98;;890:12;:18;;;909:10;890:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;890:30:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;890:30:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;890:30:9;;;;;;;;;;;;;;;;;833:98;546:391;;;136:4188;;;;;;",
  "deployedSourceMap": "136:4188:9:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;136:4188:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1669:871;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1669:871:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1204:117;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1204:117:9;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;317:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;200:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;337:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3245:150;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3245:150:9;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2859:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2859:218:9;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2859:218:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2859:218:9;;;;;;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;2859:218:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;2859:218:9;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1669:871;1745:7;1764:13;1780:26;1795:10;1780:14;:26::i;:::-;1764:42;;1816:12;244:66;1858:17;;1877:5;1841:42;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1841:42:9;;;1831:53;;;;;;1816:68;;1894:20;1917:3;;;;;;;;;;;:9;;;1927:4;1917:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1917:15:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1917:15:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1917:15:9;;;;;;;;;;;;;;;;1894:38;;2010:3;1990:24;;:8;:24;;;;:58;;;;;2030:3;;;;;;;;;;;:12;;;2043:4;2030:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2030:18:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2030:18:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2030:18:9;;;;;;;;;;;;;;;;2018:30;;:8;:30;;;;1990:58;1986:372;;;2157:4;2133:29;;:12;:29;;;2129:174;;2182:3;;;;;;;;;;;:19;;;244:66;2202:17;;2221:5;2236:4;2182:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2182:60:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2182:60:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2182:60:9;;;;;;;;;;;;;;;;;2283:4;2260:28;;2129:174;2316:3;;;;;;;;;;;:15;;;2332:4;2338:8;2316:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2316:31:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2316:31:9;;;;1986:372;2428:5;2412:21;;:12;:21;;;2408:104;;2449:3;;;;;;;;;;;:19;;;244:66;2469:17;;2488:5;2495;2449:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2449:52:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2449:52:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2449:52:9;;;;;;;;;;;;;;;;;2408:104;2529:4;2522:11;;;;;1669:871;;;;:::o;1204:117::-;1250:7;1276:38;1294:5;1309:3;1276:17;:38::i;:::-;1269:45;;1204:117;;;:::o;317:14::-;;;;;;;;;;;;;:::o;200:110::-;244:66;200:110;;;:::o;337:35::-;;;;;;;;;;;;;:::o;3245:150::-;3294:7;244:66;3347:17;;3366:20;3381:4;3366:14;:20::i;:::-;3330:57;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3330:57:9;;;3320:68;;;;;;3313:75;;3245:150;;;:::o;2859:218::-;2912:7;2931:12;2946:58;2972:4;2987:15;;;;;;;;;;;2946:17;:58::i;:::-;2931:73;;3014:15;;;;;;;;;;;:23;;;3038:4;3044;3014: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;3014:35:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3014:35:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3014:35:9;;;;3066:4;3059:11;;;2859:218;;;:::o;3696:626::-;3756:11;3885:66;3980:2;3965:304;3991:1;3988;3985:8;3965:304;;;4028:1;4025;4021:9;4016:14;;4079:6;4073:3;4067:4;4063:14;4058:28;4055:1;4047:40;4122:4;4116;4112:15;4104:23;;4156:1;4153;4149:9;4144:14;;4207:6;4201:3;4195:4;4191:14;4186:28;4183:1;4175:40;4250:4;4244;4240:15;4232:23;;3965:304;;;3969:15;4303:2;4300:1;4290:16;4283:23;;3857:459;;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"./ENS.sol\";\n\ncontract NameResolver {\n    function setName(bytes32 node, string memory name) public;\n}\n\ncontract ReverseRegistrar {\n    // namehash('addr.reverse')\n    bytes32 public constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\n\n    ENS public ens;\n    NameResolver 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(ENS ensAddr, NameResolver resolverAddr) public {\n        ens = ensAddr;\n        defaultResolver = resolverAddr;\n\n        // Assign ownership of the reverse record to our deployer\n        ReverseRegistrar oldRegistrar = ReverseRegistrar(ens.owner(ADDR_REVERSE_NODE));\n        if (address(oldRegistrar) != address(0x0)) {\n            oldRegistrar.claim(msg.sender);\n        }\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(0x0));\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(0x0) && resolver != 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) {\n        bytes32 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 pure returns (bytes32) {\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 pure returns (bytes32 ret) {\n        addr;\n        ret; // Stop warning us about unused variables\n        assembly {\n            let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n\n            for { let i := 40 } 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\n            ret := keccak256(0, 40)\n        }\n    }\n}\n",
  "sourcePath": "/Users/makoto/work/ens/ens/contracts/ReverseRegistrar.sol",
  "ast": {
    "absolutePath": "/Users/makoto/work/ens/ens/contracts/ReverseRegistrar.sol",
    "exportedSymbols": {
      "NameResolver": [
        2738
      ],
      "ReverseRegistrar": [
        2954
      ]
    },
    "id": 2955,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2729,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "/Users/makoto/work/ens/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 2730,
        "nodeType": "ImportDirective",
        "scope": 2955,
        "sourceUnit": 437,
        "src": "25:19:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 2738,
        "linearizedBaseContracts": [
          2738
        ],
        "name": "NameResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 2737,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2732,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "91:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2731,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "91:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2734,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "105:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2733,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "105:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "90:34:9"
            },
            "returnParameters": {
              "id": 2736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "131:0:9"
            },
            "scope": 2738,
            "src": "74:58:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2955,
        "src": "46:88:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2954,
        "linearizedBaseContracts": [
          2954
        ],
        "name": "ReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 2741,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 2954,
            "src": "200:110:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2739,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "200:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 2740,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "244:66:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 2743,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 2954,
            "src": "317:14:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$436",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 2742,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 436,
              "src": "317:3:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$436",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 2745,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 2954,
            "src": "337:35:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_NameResolver_$2738",
              "typeString": "contract NameResolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 2744,
              "name": "NameResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2738,
              "src": "337:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NameResolver_$2738",
                "typeString": "contract NameResolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2785,
              "nodeType": "Block",
              "src": "605:332:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2752,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2743,
                      "src": "615:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$436",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2753,
                      "name": "ensAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2747,
                      "src": "621:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$436",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "615:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$436",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 2755,
                  "nodeType": "ExpressionStatement",
                  "src": "615:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2756,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2745,
                      "src": "638:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NameResolver_$2738",
                        "typeString": "contract NameResolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2757,
                      "name": "resolverAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2749,
                      "src": "656:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NameResolver_$2738",
                        "typeString": "contract NameResolver"
                      }
                    },
                    "src": "638:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NameResolver_$2738",
                      "typeString": "contract NameResolver"
                    }
                  },
                  "id": 2759,
                  "nodeType": "ExpressionStatement",
                  "src": "638:30:9"
                },
                {
                  "assignments": [
                    2761
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2761,
                      "name": "oldRegistrar",
                      "nodeType": "VariableDeclaration",
                      "scope": 2785,
                      "src": "745:29:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                        "typeString": "contract ReverseRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2760,
                        "name": "ReverseRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2954,
                        "src": "745:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                          "typeString": "contract ReverseRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2768,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2765,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2741,
                            "src": "804:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2763,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2743,
                            "src": "794:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$436",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 2764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 405,
                          "src": "794:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 2766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "794:28:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2762,
                      "name": "ReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2954,
                      "src": "777:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ReverseRegistrar_$2954_$",
                        "typeString": "type(contract ReverseRegistrar)"
                      }
                    },
                    "id": 2767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "777:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                      "typeString": "contract ReverseRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "745:78:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2770,
                          "name": "oldRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2761,
                          "src": "845:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                            "typeString": "contract ReverseRegistrar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                            "typeString": "contract ReverseRegistrar"
                          }
                        ],
                        "id": 2769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "837:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 2771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "837:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 2773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "870:3:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 2772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "862:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 2774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "862:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "837:37:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2784,
                  "nodeType": "IfStatement",
                  "src": "833:98:9",
                  "trueBody": {
                    "id": 2783,
                    "nodeType": "Block",
                    "src": "876:55:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2779,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3032,
                                "src": "909:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "909:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2776,
                              "name": "oldRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2761,
                              "src": "890:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                "typeString": "contract ReverseRegistrar"
                              }
                            },
                            "id": 2778,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claim",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2801,
                            "src": "890:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) external returns (bytes32)"
                            }
                          },
                          "id": 2781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "890:30:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2782,
                        "nodeType": "ExpressionStatement",
                        "src": "890:30:9"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 2786,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2750,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2747,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2786,
                  "src": "558:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$436",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2746,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 436,
                    "src": "558:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$436",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2749,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2786,
                  "src": "571:25:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_NameResolver_$2738",
                    "typeString": "contract NameResolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2748,
                    "name": "NameResolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2738,
                    "src": "571:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NameResolver_$2738",
                      "typeString": "contract NameResolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "557:40:9"
            },
            "returnParameters": {
              "id": 2751,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "605:0:9"
            },
            "scope": 2954,
            "src": "546:391:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2800,
              "nodeType": "Block",
              "src": "1259:62:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2794,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2788,
                        "src": "1294:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 2796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1309:3:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1301:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2797,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1301:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2793,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2894,
                      "src": "1276:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 2798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1276:38:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2792,
                  "id": 2799,
                  "nodeType": "Return",
                  "src": "1269:45:9"
                }
              ]
            },
            "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": 2801,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2788,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2801,
                  "src": "1219:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2787,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1219:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1218:15:9"
            },
            "returnParameters": {
              "id": 2792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2791,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2801,
                  "src": "1250:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2790,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1250:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1249:9:9"
            },
            "scope": 2954,
            "src": "1204:117:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2893,
              "nodeType": "Block",
              "src": "1754:786:9",
              "statements": [
                {
                  "assignments": [
                    2811
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2811,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1764:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2810,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1764:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2816,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2813,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3032,
                          "src": "1795:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1795:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2812,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2953,
                      "src": "1780:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 2815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1780:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1764:42:9"
                },
                {
                  "assignments": [
                    2818
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2818,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1816:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2817,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1816:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2826,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2822,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2741,
                            "src": "1858:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2823,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2811,
                            "src": "1877:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2820,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3019,
                            "src": "1841:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 2821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1841:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 2824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1841:42:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2819,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3026,
                      "src": "1831:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1831:53:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1816:68:9"
                },
                {
                  "assignments": [
                    2828
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2828,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1894:20:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2827,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1894:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2833,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2831,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2818,
                        "src": "1927:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2829,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2743,
                        "src": "1917:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$436",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 2830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 405,
                      "src": "1917:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 2832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1917:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1894:38:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 2838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2834,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2805,
                        "src": "1990:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 2836,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2010:3:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2002:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2837,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2002:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1990:24:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 2844,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2839,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2805,
                        "src": "2018:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2842,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2818,
                            "src": "2043:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2840,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2743,
                            "src": "2030:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$436",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 2841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "resolver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 412,
                          "src": "2030:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 2843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2030:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2018:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1990:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2877,
                  "nodeType": "IfStatement",
                  "src": "1986:372:9",
                  "trueBody": {
                    "id": 2876,
                    "nodeType": "Block",
                    "src": "2050:308:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2846,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2828,
                            "src": "2133:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2848,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3066,
                                "src": "2157:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              ],
                              "id": 2847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2149:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 2849,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2149:13:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2133:29:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2868,
                        "nodeType": "IfStatement",
                        "src": "2129:174:9",
                        "trueBody": {
                          "id": 2867,
                          "nodeType": "Block",
                          "src": "2164:139:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2854,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2741,
                                    "src": "2202:17:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2855,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2811,
                                    "src": "2221:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 2857,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3066,
                                        "src": "2236:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      ],
                                      "id": 2856,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2228:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 2858,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2228:13:9",
                                    "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": 2851,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2743,
                                    "src": "2182:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$436",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 2853,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 370,
                                  "src": "2182:19:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes32,bytes32,address) external returns (bytes32)"
                                  }
                                },
                                "id": 2859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2182:60:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 2860,
                              "nodeType": "ExpressionStatement",
                              "src": "2182:60:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2865,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2861,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2828,
                                  "src": "2260:12:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 2863,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3066,
                                      "src": "2283:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    ],
                                    "id": 2862,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2275:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 2864,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2275:13:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2260:28:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 2866,
                              "nodeType": "ExpressionStatement",
                              "src": "2260:28:9"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2872,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2818,
                              "src": "2332:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2873,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2805,
                              "src": "2338:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2869,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2743,
                              "src": "2316:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$436",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 2871,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 377,
                            "src": "2316:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 2874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2316:31:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2875,
                        "nodeType": "ExpressionStatement",
                        "src": "2316:31:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2878,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2828,
                      "src": "2412:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2879,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2803,
                      "src": "2428:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2412:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2890,
                  "nodeType": "IfStatement",
                  "src": "2408:104:9",
                  "trueBody": {
                    "id": 2889,
                    "nodeType": "Block",
                    "src": "2435:77:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2884,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2741,
                              "src": "2469:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2885,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2811,
                              "src": "2488:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2886,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2803,
                              "src": "2495:5:9",
                              "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": 2881,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2743,
                              "src": "2449:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$436",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 2883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 370,
                            "src": "2449:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes32,address) external returns (bytes32)"
                            }
                          },
                          "id": 2887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2449:52:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2888,
                        "nodeType": "ExpressionStatement",
                        "src": "2449:52:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2891,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2818,
                    "src": "2529:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2809,
                  "id": 2892,
                  "nodeType": "Return",
                  "src": "2522:11:9"
                }
              ]
            },
            "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": 2894,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2803,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2894,
                  "src": "1696:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1696:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2805,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 2894,
                  "src": "1711:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2804,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1711:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1695:33:9"
            },
            "returnParameters": {
              "id": 2809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2808,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2894,
                  "src": "1745:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2807,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1745:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1744:9:9"
            },
            "scope": 2954,
            "src": "1669:871:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2921,
              "nodeType": "Block",
              "src": "2921:156:9",
              "statements": [
                {
                  "assignments": [
                    2902
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2902,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 2921,
                      "src": "2931:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2901,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2931:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2911,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2905,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3066,
                            "src": "2972:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                              "typeString": "contract ReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                              "typeString": "contract ReverseRegistrar"
                            }
                          ],
                          "id": 2904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2964:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2964:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2908,
                            "name": "defaultResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2745,
                            "src": "2987:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NameResolver_$2738",
                              "typeString": "contract NameResolver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NameResolver_$2738",
                              "typeString": "contract NameResolver"
                            }
                          ],
                          "id": 2907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2979:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2979:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2903,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2894,
                      "src": "2946:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 2910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2946:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2931:73:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2915,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2902,
                        "src": "3038:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2916,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2896,
                        "src": "3044:4:9",
                        "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": 2912,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2745,
                        "src": "3014:15:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NameResolver_$2738",
                          "typeString": "contract NameResolver"
                        }
                      },
                      "id": 2914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2737,
                      "src": "3014:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 2917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3014:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2918,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2919,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2902,
                    "src": "3066:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2900,
                  "id": 2920,
                  "nodeType": "Return",
                  "src": "3059:11:9"
                }
              ]
            },
            "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": 2922,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2896,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2922,
                  "src": "2876:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2895,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2876:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2875:20:9"
            },
            "returnParameters": {
              "id": 2900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2899,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2922,
                  "src": "2912:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2898,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2912:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2911:9:9"
            },
            "scope": 2954,
            "src": "2859:218:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2939,
              "nodeType": "Block",
              "src": "3303:92:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2932,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2741,
                            "src": "3347:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2934,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2924,
                                "src": "3381:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 2933,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2953,
                              "src": "3366:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) pure returns (bytes32)"
                              }
                            },
                            "id": 2935,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3366:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2930,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3019,
                            "src": "3330:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 2931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3330:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 2936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3330:57:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2929,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3026,
                      "src": "3320:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3320:68:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2928,
                  "id": 2938,
                  "nodeType": "Return",
                  "src": "3313:75:9"
                }
              ]
            },
            "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": 2940,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2925,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2924,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2940,
                  "src": "3259:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2923,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3259:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3258:14:9"
            },
            "returnParameters": {
              "id": 2928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2927,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2940,
                  "src": "3294:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2926,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3294:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3293:9:9"
            },
            "scope": 2954,
            "src": "3245:150:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2952,
              "nodeType": "Block",
              "src": "3769:553:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2947,
                    "name": "addr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2942,
                    "src": "3779:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2948,
                  "nodeType": "ExpressionStatement",
                  "src": "3779:4:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2949,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2945,
                    "src": "3793:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 2950,
                  "nodeType": "ExpressionStatement",
                  "src": "3793:3:9"
                },
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4116:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4104:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4232:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4067:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4244:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 2945,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4283:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4195:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2951,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    for { let i := 40 } gt(i, 0) { }\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": "3848:468:9"
                }
              ]
            },
            "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": 2953,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2942,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2953,
                  "src": "3720:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2941,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3720:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3719:14:9"
            },
            "returnParameters": {
              "id": 2946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2945,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 2953,
                  "src": "3756:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2944,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3756:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3755:13:9"
            },
            "scope": 2954,
            "src": "3696:626:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 2955,
        "src": "136:4188:9"
      }
    ],
    "src": "0:4325:9"
  },
  "legacyAST": {
    "absolutePath": "/Users/makoto/work/ens/ens/contracts/ReverseRegistrar.sol",
    "exportedSymbols": {
      "NameResolver": [
        2738
      ],
      "ReverseRegistrar": [
        2954
      ]
    },
    "id": 2955,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2729,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "absolutePath": "/Users/makoto/work/ens/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 2730,
        "nodeType": "ImportDirective",
        "scope": 2955,
        "sourceUnit": 437,
        "src": "25:19:9",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 2738,
        "linearizedBaseContracts": [
          2738
        ],
        "name": "NameResolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 2737,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2732,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "91:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2731,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "91:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2734,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2737,
                  "src": "105:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2733,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "105:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "90:34:9"
            },
            "returnParameters": {
              "id": 2736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "131:0:9"
            },
            "scope": 2738,
            "src": "74:58:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 2955,
        "src": "46:88:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 2954,
        "linearizedBaseContracts": [
          2954
        ],
        "name": "ReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 2741,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 2954,
            "src": "200:110:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 2739,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "200:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 2740,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "244:66:9",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 2743,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 2954,
            "src": "317:14:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$436",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 2742,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 436,
              "src": "317:3:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$436",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 2745,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 2954,
            "src": "337:35:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_NameResolver_$2738",
              "typeString": "contract NameResolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 2744,
              "name": "NameResolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2738,
              "src": "337:12:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NameResolver_$2738",
                "typeString": "contract NameResolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2785,
              "nodeType": "Block",
              "src": "605:332:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2752,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2743,
                      "src": "615:3:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$436",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2753,
                      "name": "ensAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2747,
                      "src": "621:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$436",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "615:13:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$436",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 2755,
                  "nodeType": "ExpressionStatement",
                  "src": "615:13:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2756,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2745,
                      "src": "638:15:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NameResolver_$2738",
                        "typeString": "contract NameResolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 2757,
                      "name": "resolverAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2749,
                      "src": "656:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NameResolver_$2738",
                        "typeString": "contract NameResolver"
                      }
                    },
                    "src": "638:30:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NameResolver_$2738",
                      "typeString": "contract NameResolver"
                    }
                  },
                  "id": 2759,
                  "nodeType": "ExpressionStatement",
                  "src": "638:30:9"
                },
                {
                  "assignments": [
                    2761
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2761,
                      "name": "oldRegistrar",
                      "nodeType": "VariableDeclaration",
                      "scope": 2785,
                      "src": "745:29:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                        "typeString": "contract ReverseRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 2760,
                        "name": "ReverseRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2954,
                        "src": "745:16:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                          "typeString": "contract ReverseRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2768,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2765,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2741,
                            "src": "804:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2763,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2743,
                            "src": "794:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$436",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 2764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 405,
                          "src": "794:9:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 2766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "794:28:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2762,
                      "name": "ReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2954,
                      "src": "777:16:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ReverseRegistrar_$2954_$",
                        "typeString": "type(contract ReverseRegistrar)"
                      }
                    },
                    "id": 2767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "777:46:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                      "typeString": "contract ReverseRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "745:78:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2770,
                          "name": "oldRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2761,
                          "src": "845:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                            "typeString": "contract ReverseRegistrar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                            "typeString": "contract ReverseRegistrar"
                          }
                        ],
                        "id": 2769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "837:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 2771,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "837:21:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 2773,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "870:3:9",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0x0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 2772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "862:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 2774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "862:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "837:37:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2784,
                  "nodeType": "IfStatement",
                  "src": "833:98:9",
                  "trueBody": {
                    "id": 2783,
                    "nodeType": "Block",
                    "src": "876:55:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 2779,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3032,
                                "src": "909:3:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 2780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "909:10:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2776,
                              "name": "oldRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2761,
                              "src": "890:12:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                "typeString": "contract ReverseRegistrar"
                              }
                            },
                            "id": 2778,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claim",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2801,
                            "src": "890:18:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) external returns (bytes32)"
                            }
                          },
                          "id": 2781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "890:30:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2782,
                        "nodeType": "ExpressionStatement",
                        "src": "890:30:9"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 2786,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2750,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2747,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2786,
                  "src": "558:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$436",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2746,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 436,
                    "src": "558:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$436",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2749,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2786,
                  "src": "571:25:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_NameResolver_$2738",
                    "typeString": "contract NameResolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 2748,
                    "name": "NameResolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2738,
                    "src": "571:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NameResolver_$2738",
                      "typeString": "contract NameResolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "557:40:9"
            },
            "returnParameters": {
              "id": 2751,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "605:0:9"
            },
            "scope": 2954,
            "src": "546:391:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2800,
              "nodeType": "Block",
              "src": "1259:62:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2794,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2788,
                        "src": "1294:5:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 2796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1309:3:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1301:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2797,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1301:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2793,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2894,
                      "src": "1276:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 2798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1276:38:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2792,
                  "id": 2799,
                  "nodeType": "Return",
                  "src": "1269:45:9"
                }
              ]
            },
            "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": 2801,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2788,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2801,
                  "src": "1219:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2787,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1219:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1218:15:9"
            },
            "returnParameters": {
              "id": 2792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2791,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2801,
                  "src": "1250:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2790,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1250:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1249:9:9"
            },
            "scope": 2954,
            "src": "1204:117:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2893,
              "nodeType": "Block",
              "src": "1754:786:9",
              "statements": [
                {
                  "assignments": [
                    2811
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2811,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1764:13:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2810,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1764:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2816,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 2813,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3032,
                          "src": "1795:3:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1795:10:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 2812,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2953,
                      "src": "1780:14:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 2815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1780:26:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1764:42:9"
                },
                {
                  "assignments": [
                    2818
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2818,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1816:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2817,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1816:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2826,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2822,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2741,
                            "src": "1858:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 2823,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2811,
                            "src": "1877:5:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2820,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3019,
                            "src": "1841:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 2821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1841:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 2824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1841:42:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2819,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3026,
                      "src": "1831:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2825,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1831:53:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1816:68:9"
                },
                {
                  "assignments": [
                    2828
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2828,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 2893,
                      "src": "1894:20:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2827,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1894:7:9",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2833,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2831,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2818,
                        "src": "1927:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 2829,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2743,
                        "src": "1917:3:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$436",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 2830,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 405,
                      "src": "1917:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 2832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1917:15:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1894:38:9"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 2838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2834,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2805,
                        "src": "1990:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 2836,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2010:3:9",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2002:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2837,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2002:12:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1990:24:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 2844,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 2839,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2805,
                        "src": "2018:8:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2842,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2818,
                            "src": "2043:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2840,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2743,
                            "src": "2030:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$436",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 2841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "resolver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 412,
                          "src": "2030:12:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 2843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2030:18:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2018:30:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1990:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2877,
                  "nodeType": "IfStatement",
                  "src": "1986:372:9",
                  "trueBody": {
                    "id": 2876,
                    "nodeType": "Block",
                    "src": "2050:308:9",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2846,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2828,
                            "src": "2133:12:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2848,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3066,
                                "src": "2157:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              ],
                              "id": 2847,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2149:7:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 2849,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2149:13:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2133:29:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 2868,
                        "nodeType": "IfStatement",
                        "src": "2129:174:9",
                        "trueBody": {
                          "id": 2867,
                          "nodeType": "Block",
                          "src": "2164:139:9",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 2854,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2741,
                                    "src": "2202:17:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 2855,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2811,
                                    "src": "2221:5:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 2857,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3066,
                                        "src": "2236:4:9",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      ],
                                      "id": 2856,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2228:7:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 2858,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2228:13:9",
                                    "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": 2851,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2743,
                                    "src": "2182:3:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$436",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 2853,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 370,
                                  "src": "2182:19:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes32,bytes32,address) external returns (bytes32)"
                                  }
                                },
                                "id": 2859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2182:60:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 2860,
                              "nodeType": "ExpressionStatement",
                              "src": "2182:60:9"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 2865,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 2861,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2828,
                                  "src": "2260:12:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 2863,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3066,
                                      "src": "2283:4:9",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    ],
                                    "id": 2862,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2275:7:9",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 2864,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2275:13:9",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2260:28:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 2866,
                              "nodeType": "ExpressionStatement",
                              "src": "2260:28:9"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2872,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2818,
                              "src": "2332:4:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2873,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2805,
                              "src": "2338:8:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 2869,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2743,
                              "src": "2316:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$436",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 2871,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 377,
                            "src": "2316:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 2874,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2316:31:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2875,
                        "nodeType": "ExpressionStatement",
                        "src": "2316:31:9"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 2878,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2828,
                      "src": "2412:12:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2879,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2803,
                      "src": "2428:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2412:21:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2890,
                  "nodeType": "IfStatement",
                  "src": "2408:104:9",
                  "trueBody": {
                    "id": 2889,
                    "nodeType": "Block",
                    "src": "2435:77:9",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 2884,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2741,
                              "src": "2469:17:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2885,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2811,
                              "src": "2488:5:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 2886,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2803,
                              "src": "2495:5:9",
                              "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": 2881,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2743,
                              "src": "2449:3:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$436",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 2883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 370,
                            "src": "2449:19:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,bytes32,address) external returns (bytes32)"
                            }
                          },
                          "id": 2887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2449:52:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 2888,
                        "nodeType": "ExpressionStatement",
                        "src": "2449:52:9"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2891,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2818,
                    "src": "2529:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2809,
                  "id": 2892,
                  "nodeType": "Return",
                  "src": "2522:11:9"
                }
              ]
            },
            "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": 2894,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2803,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 2894,
                  "src": "1696:13:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1696:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2805,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 2894,
                  "src": "1711:16:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2804,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1711:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1695:33:9"
            },
            "returnParameters": {
              "id": 2809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2808,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2894,
                  "src": "1745:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2807,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1745:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1744:9:9"
            },
            "scope": 2954,
            "src": "1669:871:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2921,
              "nodeType": "Block",
              "src": "2921:156:9",
              "statements": [
                {
                  "assignments": [
                    2902
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2902,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 2921,
                      "src": "2931:12:9",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2901,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2931:7:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2911,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2905,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3066,
                            "src": "2972:4:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                              "typeString": "contract ReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$2954",
                              "typeString": "contract ReverseRegistrar"
                            }
                          ],
                          "id": 2904,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2964:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2964:13:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2908,
                            "name": "defaultResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2745,
                            "src": "2987:15:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NameResolver_$2738",
                              "typeString": "contract NameResolver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_NameResolver_$2738",
                              "typeString": "contract NameResolver"
                            }
                          ],
                          "id": 2907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2979:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 2909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2979:24:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2903,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2894,
                      "src": "2946:17:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 2910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2946:58:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2931:73:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2915,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2902,
                        "src": "3038:4:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2916,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2896,
                        "src": "3044:4:9",
                        "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": 2912,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2745,
                        "src": "3014:15:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NameResolver_$2738",
                          "typeString": "contract NameResolver"
                        }
                      },
                      "id": 2914,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2737,
                      "src": "3014:23:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 2917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3014:35:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2918,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:35:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2919,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2902,
                    "src": "3066:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2900,
                  "id": 2920,
                  "nodeType": "Return",
                  "src": "3059:11:9"
                }
              ]
            },
            "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": 2922,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2896,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 2922,
                  "src": "2876:18:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2895,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2876:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2875:20:9"
            },
            "returnParameters": {
              "id": 2900,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2899,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2922,
                  "src": "2912:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2898,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2912:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2911:9:9"
            },
            "scope": 2954,
            "src": "2859:218:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2939,
              "nodeType": "Block",
              "src": "3303:92:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 2932,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2741,
                            "src": "3347:17:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 2934,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2924,
                                "src": "3381:4:9",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 2933,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2953,
                              "src": "3366:14:9",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) pure returns (bytes32)"
                              }
                            },
                            "id": 2935,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3366:20:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 2930,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3019,
                            "src": "3330:3:9",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 2931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3330:16:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 2936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3330:57:9",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2929,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3026,
                      "src": "3320:9:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3320:68:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 2928,
                  "id": 2938,
                  "nodeType": "Return",
                  "src": "3313:75:9"
                }
              ]
            },
            "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": 2940,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2925,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2924,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2940,
                  "src": "3259:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2923,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3259:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3258:14:9"
            },
            "returnParameters": {
              "id": 2928,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2927,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2940,
                  "src": "3294:7:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2926,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3294:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3293:9:9"
            },
            "scope": 2954,
            "src": "3245:150:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2952,
              "nodeType": "Block",
              "src": "3769:553:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2947,
                    "name": "addr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2942,
                    "src": "3779:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 2948,
                  "nodeType": "ExpressionStatement",
                  "src": "3779:4:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2949,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2945,
                    "src": "3793:3:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 2950,
                  "nodeType": "ExpressionStatement",
                  "src": "3793:3:9"
                },
                {
                  "externalReferences": [
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4116:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4104:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4232:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4067:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4244:4:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "ret": {
                        "declaration": 2945,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4283:3:9",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 2942,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4195:4:9",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2951,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    for { let i := 40 } gt(i, 0) { }\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": "3848:468:9"
                }
              ]
            },
            "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": 2953,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2942,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2953,
                  "src": "3720:12:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2941,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3720:7:9",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3719:14:9"
            },
            "returnParameters": {
              "id": 2946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2945,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 2953,
                  "src": "3756:11:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2944,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3756:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3755:13:9"
            },
            "scope": 2954,
            "src": "3696:626:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 2955,
        "src": "136:4188:9"
      }
    ],
    "src": "0:4325:9"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-06-23T14:47:43.713Z",
  "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."
      }
    }
  },
  "userdoc": {
    "methods": {}
  }
}