{
  "contractName": "ReverseRegistrar",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "ADDR_REVERSE_NODE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "defaultResolver",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "ensAddr",
          "type": "address"
        },
        {
          "name": "resolverAddr",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "claim",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "owner",
          "type": "address"
        },
        {
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "claimWithResolver",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "node",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.8+commit.23d335f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDR_REVERSE_NODE\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"defaultResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"node\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"resolverAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"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\":{\"@ensdomains/ens/contracts/ReverseRegistrar.sol\":\"ReverseRegistrar\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@ensdomains/ens/contracts/ENS.sol\":{\"keccak256\":\"0xe688db01c0b974f8ff8565557f7fe81aa1f209c1497ec1e74536241f4cc11f08\",\"urls\":[\"bzzr://04aa083550728a1da54d9acf874f4fca77cc3afef81c57f1ec19be78af05019a\"]},\"@ensdomains/ens/contracts/ReverseRegistrar.sol\":{\"keccak256\":\"0x9f88ee601bc32f69ded7a3931640bcbd379920db4f3e45923f10fcc08642a8e2\",\"urls\":[\"bzzr://4a291280ddecf6766aefb98ee46c92e0daf6122653aca9bdb8ed197854c7455a\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50604051604080610dbd8339810180604052604081101561003057600080fd5b810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561016357600080fd5b505afa158015610177573d6000803e3d6000fd5b505050506040513d602081101561018d57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610290578073ffffffffffffffffffffffffffffffffffffffff16631e83409a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561025357600080fd5b505af1158015610267573d6000803e3d6000fd5b505050506040513d602081101561027d57600080fd5b8101908080519060200190929190505050505b505050610b1b806102a26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80637cf8a2eb1161005b5780637cf8a2eb1461019c578063828eab0e146101ba578063bffbe61c14610204578063c47f00271461025c5761007d565b80630f5a5466146100825780631e83409a146100fa5780633f15457f14610152575b600080fd5b6100e46004803603604081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061032b565b6040518082815260200191505060405180910390f35b61013c6004803603602081101561011057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610868565b6040518082815260200191505060405180910390f35b61015a61087c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a46108a1565b6040518082815260200191505060405180910390f35b6101c26108c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102466004803603602081101561021a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ee565b6040518082815260200191505060405180910390f35b6103156004803603602081101561027257600080fd5b810190808035906020019064010000000081111561028f57600080fd5b8201836020820111156102a157600080fd5b803590602001918460018302840111640100000000831117156102c357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610951565b6040518082815260200191505060405180910390f35b60008061033733610a85565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b82604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d602081101561042d57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561055557506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156104ea57600080fd5b505afa1580156104fe573d6000803e3d6000fd5b505050506040513d602081101561051457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561073d573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461067c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050503090505b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561072457600080fd5b505af1158015610738573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b505050505b81935050505092915050565b600061087582600061032b565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b61091d83610a85565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008061098030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661032b565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a175780820151818401526020810190506109fc565b50505050905090810190601f168015610a445780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610a6457600080fd5b505af1158015610a78573d6000803e3d6000fd5b5050505080915050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b6000811115610ae15760018103905081600f85161a815360108404935060018103905081600f85161a8153601084049350610aab565b50602860002091505091905056fea165627a7a72305820d7e45464c753ce4c49738df6d8179cbfa2a03a565efd5066ac936ed2579c44f30029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80637cf8a2eb1161005b5780637cf8a2eb1461019c578063828eab0e146101ba578063bffbe61c14610204578063c47f00271461025c5761007d565b80630f5a5466146100825780631e83409a146100fa5780633f15457f14610152575b600080fd5b6100e46004803603604081101561009857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061032b565b6040518082815260200191505060405180910390f35b61013c6004803603602081101561011057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610868565b6040518082815260200191505060405180910390f35b61015a61087c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a46108a1565b6040518082815260200191505060405180910390f35b6101c26108c8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102466004803603602081101561021a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ee565b6040518082815260200191505060405180910390f35b6103156004803603602081101561027257600080fd5b810190808035906020019064010000000081111561028f57600080fd5b8201836020820111156102a157600080fd5b803590602001918460018302840111640100000000831117156102c357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610951565b6040518082815260200191505060405180910390f35b60008061033733610a85565b905060007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b82604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d602081101561042d57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561055557506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156104ea57600080fd5b505afa1580156104fe573d6000803e3d6000fd5b505050506040513d602081101561051457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561073d573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461067c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050503090505b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a83876040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561072457600080fd5b505af1158015610738573d6000803e3d6000fd5b505050505b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b85896040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b15801561084357600080fd5b505af1158015610857573d6000803e3d6000fd5b505050505b81935050505092915050565b600061087582600061032b565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b61091d83610a85565b6040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008061098030600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661032b565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a175780820151818401526020810190506109fc565b50505050905090810190601f168015610a445780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610a6457600080fd5b505af1158015610a78573d6000803e3d6000fd5b5050505080915050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b6000811115610ae15760018103905081600f85161a815360108404935060018103905081600f85161a8153601084049350610aab565b50602860002091505091905056fea165627a7a72305820d7e45464c753ce4c49738df6d8179cbfa2a03a565efd5066ac936ed2579c44f30029",
  "sourceMap": "132:4184:18:-;;;538:387;8:9:-1;5:2;;;30:1;27;20:12;5:2;538:387:18;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;538:387:18;;;;;;;;;;;;;;;;;;;;;;;;;609:7;603:3;;:13;;;;;;;;;;;;;;;;;;644:12;626:15;;:30;;;;;;;;;;;;;;;;;;733:29;782:3;;;;;;;;;;;:9;;;240:66;792:17;;782:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;782:28:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;782:28:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;782:28:18;;;;;;;;;;;;;;;;733:78;;858:3;825:37;;833:12;825:37;;;821:98;;878:12;:18;;;897:10;878:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;878:30:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;878:30:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;878:30:18;;;;;;;;;;;;;;;;;821:98;538:387;;;132:4184;;;;;;",
  "deployedSourceMap": "132:4184:18:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;132:4184:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1661:871;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1661:871:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1196:117;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1196:117:18;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;313:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;196:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;333:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3237:150;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3237:150:18;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2851:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2851:218:18;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2851:218:18;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2851:218:18;;;;;;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;2851:218:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;2851:218:18;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1661:871;1737:7;1756:13;1772:26;1787:10;1772:14;:26::i;:::-;1756:42;;1808:12;240:66;1850:17;;1869:5;1833:42;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1833:42:18;;;1823:53;;;;;;1808:68;;1886:20;1909:3;;;;;;;;;;;:9;;;1919:4;1909:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1909:15:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1909:15:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1909:15:18;;;;;;;;;;;;;;;;1886:38;;2002:3;1982:24;;:8;:24;;;;:58;;;;;2022:3;;;;;;;;;;;:12;;;2035:4;2022:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2022:18:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2022:18:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2022:18:18;;;;;;;;;;;;;;;;2010:30;;:8;:30;;;;1982:58;1978:372;;;2149:4;2125:29;;:12;:29;;;2121:174;;2174:3;;;;;;;;;;;:19;;;240:66;2194:17;;2213:5;2228:4;2174:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2174:60:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2174:60:18;;;;2275:4;2252:28;;2121:174;2308:3;;;;;;;;;;;:15;;;2324:4;2330:8;2308:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2308:31:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2308:31:18;;;;1978:372;2420:5;2404:21;;:12;:21;;;2400:104;;2441:3;;;;;;;;;;;:19;;;240:66;2461:17;;2480:5;2487;2441:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2441:52:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2441:52:18;;;;2400:104;2521:4;2514:11;;;;;1661:871;;;;:::o;1196:117::-;1242:7;1268:38;1286:5;1301:3;1268:17;:38::i;:::-;1261:45;;1196:117;;;:::o;313:14::-;;;;;;;;;;;;;:::o;196:110::-;240:66;196:110;;;:::o;333:31::-;;;;;;;;;;;;;:::o;3237:150::-;3286:7;240:66;3339:17;;3358:20;3373:4;3358:14;:20::i;:::-;3322:57;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3322:57:18;;;3312:68;;;;;;3305:75;;3237:150;;;:::o;2851:218::-;2904:7;2923:12;2938:58;2964:4;2979:15;;;;;;;;;;;2938:17;:58::i;:::-;2923:73;;3006:15;;;;;;;;;;;:23;;;3030:4;3036;3006: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;3006:35:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3006:35:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3006:35:18;;;;3058:4;3051:11;;;2851:218;;;:::o;3688:626::-;3748:11;3877:66;3972:2;3957:304;3983:1;3980;3977:8;3957:304;;;4020:1;4017;4013:9;4008:14;;4071:6;4065:3;4059:4;4055:14;4050:28;4047:1;4039:40;4114:4;4108;4104:15;4096:23;;4148:1;4145;4141:9;4136:14;;4199:6;4193:3;4187:4;4183:14;4178:28;4175:1;4167:40;4242:4;4236;4232:15;4224:23;;3957:304;;;3961:15;4295:2;4292:1;4282:16;4275:23;;3849:459;;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"./ENS.sol\";\n\ncontract Resolver {\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    Resolver 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, Resolver 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": "@ensdomains/ens/contracts/ReverseRegistrar.sol",
  "ast": {
    "absolutePath": "@ensdomains/ens/contracts/ReverseRegistrar.sol",
    "exportedSymbols": {
      "Resolver": [
        3793
      ],
      "ReverseRegistrar": [
        4009
      ]
    },
    "id": 4010,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3784,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:18"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 3785,
        "nodeType": "ImportDirective",
        "scope": 4010,
        "sourceUnit": 3783,
        "src": "25:19:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 3793,
        "linearizedBaseContracts": [
          3793
        ],
        "name": "Resolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 3792,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3787,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3792,
                  "src": "87:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3786,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "87:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3789,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3792,
                  "src": "101:18:18",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "101:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "86:34:18"
            },
            "returnParameters": {
              "id": 3791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "127:0:18"
            },
            "scope": 3793,
            "src": "70:58:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4010,
        "src": "46:84:18"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4009,
        "linearizedBaseContracts": [
          4009
        ],
        "name": "ReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3796,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 4009,
            "src": "196:110:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3794,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "196:7:18",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 3795,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "240:66:18",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3798,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 4009,
            "src": "313:14:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$3782",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 3797,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3782,
              "src": "313:3:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$3782",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3800,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 4009,
            "src": "333:31:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Resolver_$3793",
              "typeString": "contract Resolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 3799,
              "name": "Resolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3793,
              "src": "333:8:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Resolver_$3793",
                "typeString": "contract Resolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3840,
              "nodeType": "Block",
              "src": "593:332:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3807,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3798,
                      "src": "603:3:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3808,
                      "name": "ensAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3802,
                      "src": "609:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "603:13:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 3810,
                  "nodeType": "ExpressionStatement",
                  "src": "603:13:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3811,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3800,
                      "src": "626:15:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3793",
                        "typeString": "contract Resolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3812,
                      "name": "resolverAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3804,
                      "src": "644:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3793",
                        "typeString": "contract Resolver"
                      }
                    },
                    "src": "626:30:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3793",
                      "typeString": "contract Resolver"
                    }
                  },
                  "id": 3814,
                  "nodeType": "ExpressionStatement",
                  "src": "626:30:18"
                },
                {
                  "assignments": [
                    3816
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3816,
                      "name": "oldRegistrar",
                      "nodeType": "VariableDeclaration",
                      "scope": 3840,
                      "src": "733:29:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                        "typeString": "contract ReverseRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3815,
                        "name": "ReverseRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4009,
                        "src": "733:16:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                          "typeString": "contract ReverseRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3823,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3820,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3796,
                            "src": "792:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3818,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3798,
                            "src": "782:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$3782",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3767,
                          "src": "782:9:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3821,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "782:28:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3817,
                      "name": "ReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4009,
                      "src": "765:16:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ReverseRegistrar_$4009_$",
                        "typeString": "type(contract ReverseRegistrar)"
                      }
                    },
                    "id": 3822,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "765:46:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                      "typeString": "contract ReverseRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "733:78:18"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3825,
                          "name": "oldRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3816,
                          "src": "833:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                            "typeString": "contract ReverseRegistrar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                            "typeString": "contract ReverseRegistrar"
                          }
                        ],
                        "id": 3824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "825:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "825:21:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 3828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "858:3:18",
                          "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": 3827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "850:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "850:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "825:37:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3839,
                  "nodeType": "IfStatement",
                  "src": "821:98:18",
                  "trueBody": {
                    "id": 3838,
                    "nodeType": "Block",
                    "src": "864:55:18",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3834,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4133,
                                "src": "897:3:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3835,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "897:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3831,
                              "name": "oldRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3816,
                              "src": "878:12:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                "typeString": "contract ReverseRegistrar"
                              }
                            },
                            "id": 3833,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claim",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3856,
                            "src": "878:18:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) external returns (bytes32)"
                            }
                          },
                          "id": 3836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "878:30:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 3837,
                        "nodeType": "ExpressionStatement",
                        "src": "878:30:18"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 3841,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3802,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3841,
                  "src": "550:11:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$3782",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3801,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3782,
                    "src": "550:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3804,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3841,
                  "src": "563:21:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Resolver_$3793",
                    "typeString": "contract Resolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3803,
                    "name": "Resolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3793,
                    "src": "563:8:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3793",
                      "typeString": "contract Resolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "549:36:18"
            },
            "returnParameters": {
              "id": 3806,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "593:0:18"
            },
            "scope": 4009,
            "src": "538:387:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3855,
              "nodeType": "Block",
              "src": "1251:62:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3849,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "1286:5:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3851,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1301:3:18",
                            "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": 3850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1293:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3852,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1293:12:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3848,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3949,
                      "src": "1268:17:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1268:38:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3847,
                  "id": 3854,
                  "nodeType": "Return",
                  "src": "1261:45:18"
                }
              ]
            },
            "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": 3856,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3844,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3843,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3856,
                  "src": "1211:13:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1211:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1210:15:18"
            },
            "returnParameters": {
              "id": 3847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3846,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3856,
                  "src": "1242:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3845,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1242:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1241:9:18"
            },
            "scope": 4009,
            "src": "1196:117:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3948,
              "nodeType": "Block",
              "src": "1746:786:18",
              "statements": [
                {
                  "assignments": [
                    3866
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3866,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 3948,
                      "src": "1756:13:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3865,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1756:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3871,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3868,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "1787:3:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1787:10:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3867,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4008,
                      "src": "1772:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 3870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1772:26:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1756:42:18"
                },
                {
                  "assignments": [
                    3873
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3873,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3948,
                      "src": "1808:12:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3872,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1808:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3881,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3877,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3796,
                            "src": "1850:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3878,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3866,
                            "src": "1869:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3875,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4120,
                            "src": "1833:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1833:16:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1833:42:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3874,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4127,
                      "src": "1823:9:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1823:53:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1808:68:18"
                },
                {
                  "assignments": [
                    3883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3883,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 3948,
                      "src": "1886:20:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3882,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1886:7:18",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3888,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3886,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3873,
                        "src": "1919:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3884,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3798,
                        "src": "1909:3:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3782",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 3885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3767,
                      "src": "1909:9:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 3887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1909:15:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1886:38:18"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3893,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3889,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "1982:8:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3891,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2002:3:18",
                            "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": 3890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1994:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1994:12:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1982:24:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3894,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "2010:8:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3897,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3873,
                            "src": "2035:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3895,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3798,
                            "src": "2022:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$3782",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "resolver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3774,
                          "src": "2022:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3898,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2022:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2010:30:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1982:58:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3932,
                  "nodeType": "IfStatement",
                  "src": "1978:372:18",
                  "trueBody": {
                    "id": 3931,
                    "nodeType": "Block",
                    "src": "2042:308:18",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3901,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3883,
                            "src": "2125:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3903,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4151,
                                "src": "2149:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              ],
                              "id": 3902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2141:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2141:13:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2125:29:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3923,
                        "nodeType": "IfStatement",
                        "src": "2121:174:18",
                        "trueBody": {
                          "id": 3922,
                          "nodeType": "Block",
                          "src": "2156:139:18",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3909,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3796,
                                    "src": "2194:17:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3910,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3866,
                                    "src": "2213:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3912,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4151,
                                        "src": "2228:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      ],
                                      "id": 3911,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2220:7:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 3913,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2220:13:18",
                                    "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": 3906,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3798,
                                    "src": "2174:3:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$3782",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 3908,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3739,
                                  "src": "2174:19:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,bytes32,address) external"
                                  }
                                },
                                "id": 3914,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2174:60:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3915,
                              "nodeType": "ExpressionStatement",
                              "src": "2174:60:18"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 3916,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3883,
                                  "src": "2252:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3918,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4151,
                                      "src": "2275:4:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    ],
                                    "id": 3917,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2267:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 3919,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2267:13:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2252:28:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3921,
                              "nodeType": "ExpressionStatement",
                              "src": "2252:28:18"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3927,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3873,
                              "src": "2324:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3928,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3860,
                              "src": "2330:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3924,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3798,
                              "src": "2308:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$3782",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3746,
                            "src": "2308:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 3929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2308:31:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3930,
                        "nodeType": "ExpressionStatement",
                        "src": "2308:31:18"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3933,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3883,
                      "src": "2404:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3934,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3858,
                      "src": "2420:5:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2404:21:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3945,
                  "nodeType": "IfStatement",
                  "src": "2400:104:18",
                  "trueBody": {
                    "id": 3944,
                    "nodeType": "Block",
                    "src": "2427:77:18",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3939,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3796,
                              "src": "2461:17:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3940,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3866,
                              "src": "2480:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3941,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3858,
                              "src": "2487:5:18",
                              "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": 3936,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3798,
                              "src": "2441:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$3782",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3739,
                            "src": "2441:19:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 3942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2441:52:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3943,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:52:18"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3946,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3873,
                    "src": "2521:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3864,
                  "id": 3947,
                  "nodeType": "Return",
                  "src": "2514:11:18"
                }
              ]
            },
            "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": 3949,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3858,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3949,
                  "src": "1688:13:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3857,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1688:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3860,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3949,
                  "src": "1703:16:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3859,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1703:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1687:33:18"
            },
            "returnParameters": {
              "id": 3864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3863,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3949,
                  "src": "1737:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3862,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1737:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1736:9:18"
            },
            "scope": 4009,
            "src": "1661:871:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3976,
              "nodeType": "Block",
              "src": "2913:156:18",
              "statements": [
                {
                  "assignments": [
                    3957
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3957,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3976,
                      "src": "2923:12:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3956,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2923:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3966,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3960,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4151,
                            "src": "2964:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                              "typeString": "contract ReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                              "typeString": "contract ReverseRegistrar"
                            }
                          ],
                          "id": 3959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2956:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2956:13:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3963,
                            "name": "defaultResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3800,
                            "src": "2979:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Resolver_$3793",
                              "typeString": "contract Resolver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Resolver_$3793",
                              "typeString": "contract Resolver"
                            }
                          ],
                          "id": 3962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2971:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3964,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2971:24:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3958,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3949,
                      "src": "2938:17:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2938:58:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2923:73:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3970,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3957,
                        "src": "3030:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3971,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3951,
                        "src": "3036:4:18",
                        "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": 3967,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3800,
                        "src": "3006:15:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Resolver_$3793",
                          "typeString": "contract Resolver"
                        }
                      },
                      "id": 3969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3792,
                      "src": "3006:23:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 3972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3006:35:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3973,
                  "nodeType": "ExpressionStatement",
                  "src": "3006:35:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3974,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3957,
                    "src": "3058:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3955,
                  "id": 3975,
                  "nodeType": "Return",
                  "src": "3051:11:18"
                }
              ]
            },
            "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": 3977,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3952,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3951,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3977,
                  "src": "2868:18:18",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3950,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2867:20:18"
            },
            "returnParameters": {
              "id": 3955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3954,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3977,
                  "src": "2904:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3953,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2903:9:18"
            },
            "scope": 4009,
            "src": "2851:218:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3994,
              "nodeType": "Block",
              "src": "3295:92:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3987,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3796,
                            "src": "3339:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3989,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3979,
                                "src": "3373:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3988,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4008,
                              "src": "3358:14:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) pure returns (bytes32)"
                              }
                            },
                            "id": 3990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3358:20:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3985,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4120,
                            "src": "3322:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3322:16:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3322:57:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3984,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4127,
                      "src": "3312:9:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3312:68:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3983,
                  "id": 3993,
                  "nodeType": "Return",
                  "src": "3305:75:18"
                }
              ]
            },
            "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": 3995,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3979,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "3251:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3978,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3251:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3250:14:18"
            },
            "returnParameters": {
              "id": 3983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3982,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "3286:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3981,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3286:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3285:9:18"
            },
            "scope": 4009,
            "src": "3237:150:18",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4007,
              "nodeType": "Block",
              "src": "3761:553:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4002,
                    "name": "addr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3997,
                    "src": "3771:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4003,
                  "nodeType": "ExpressionStatement",
                  "src": "3771:4:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4004,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4000,
                    "src": "3785:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 4005,
                  "nodeType": "ExpressionStatement",
                  "src": "3785:3:18"
                },
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 4000,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4275:3:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4096:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4224:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4108:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4059:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4236:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4187:4:18",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4006,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    for {\n        let i := 40\n    }\n    gt(i, 0)\n    {\n    }\n    {\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n    }\n    ret := keccak256(0, 40)\n}",
                  "src": "3840:468:18"
                }
              ]
            },
            "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": 4008,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3998,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3997,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 4008,
                  "src": "3712:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3996,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3712:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3711:14:18"
            },
            "returnParameters": {
              "id": 4001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4000,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 4008,
                  "src": "3748:11:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3999,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3748:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3747:13:18"
            },
            "scope": 4009,
            "src": "3688:626:18",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 4010,
        "src": "132:4184:18"
      }
    ],
    "src": "0:4317:18"
  },
  "legacyAST": {
    "absolutePath": "@ensdomains/ens/contracts/ReverseRegistrar.sol",
    "exportedSymbols": {
      "Resolver": [
        3793
      ],
      "ReverseRegistrar": [
        4009
      ]
    },
    "id": 4010,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3784,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:18"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENS.sol",
        "file": "./ENS.sol",
        "id": 3785,
        "nodeType": "ImportDirective",
        "scope": 4010,
        "sourceUnit": 3783,
        "src": "25:19:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 3793,
        "linearizedBaseContracts": [
          3793
        ],
        "name": "Resolver",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 3792,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3787,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 3792,
                  "src": "87:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3786,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "87:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3789,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3792,
                  "src": "101:18:18",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "101:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "86:34:18"
            },
            "returnParameters": {
              "id": 3791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "127:0:18"
            },
            "scope": 3793,
            "src": "70:58:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4010,
        "src": "46:84:18"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4009,
        "linearizedBaseContracts": [
          4009
        ],
        "name": "ReverseRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 3796,
            "name": "ADDR_REVERSE_NODE",
            "nodeType": "VariableDeclaration",
            "scope": 4009,
            "src": "196:110:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 3794,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "196:7:18",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532",
              "id": 3795,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "240:66:18",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1",
                "typeString": "int_const 6595...(69 digits omitted)...3154"
              },
              "value": "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3798,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 4009,
            "src": "313:14:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$3782",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 3797,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3782,
              "src": "313:3:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$3782",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3800,
            "name": "defaultResolver",
            "nodeType": "VariableDeclaration",
            "scope": 4009,
            "src": "333:31:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Resolver_$3793",
              "typeString": "contract Resolver"
            },
            "typeName": {
              "contractScope": null,
              "id": 3799,
              "name": "Resolver",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3793,
              "src": "333:8:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Resolver_$3793",
                "typeString": "contract Resolver"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3840,
              "nodeType": "Block",
              "src": "593:332:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3807,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3798,
                      "src": "603:3:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3808,
                      "name": "ensAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3802,
                      "src": "609:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3782",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "603:13:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 3810,
                  "nodeType": "ExpressionStatement",
                  "src": "603:13:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3813,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3811,
                      "name": "defaultResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3800,
                      "src": "626:15:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3793",
                        "typeString": "contract Resolver"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3812,
                      "name": "resolverAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3804,
                      "src": "644:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Resolver_$3793",
                        "typeString": "contract Resolver"
                      }
                    },
                    "src": "626:30:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3793",
                      "typeString": "contract Resolver"
                    }
                  },
                  "id": 3814,
                  "nodeType": "ExpressionStatement",
                  "src": "626:30:18"
                },
                {
                  "assignments": [
                    3816
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3816,
                      "name": "oldRegistrar",
                      "nodeType": "VariableDeclaration",
                      "scope": 3840,
                      "src": "733:29:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                        "typeString": "contract ReverseRegistrar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3815,
                        "name": "ReverseRegistrar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4009,
                        "src": "733:16:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                          "typeString": "contract ReverseRegistrar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3823,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3820,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3796,
                            "src": "792:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3818,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3798,
                            "src": "782:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$3782",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3819,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3767,
                          "src": "782:9:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3821,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "782:28:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3817,
                      "name": "ReverseRegistrar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4009,
                      "src": "765:16:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_ReverseRegistrar_$4009_$",
                        "typeString": "type(contract ReverseRegistrar)"
                      }
                    },
                    "id": 3822,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "765:46:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                      "typeString": "contract ReverseRegistrar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "733:78:18"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3825,
                          "name": "oldRegistrar",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3816,
                          "src": "833:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                            "typeString": "contract ReverseRegistrar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                            "typeString": "contract ReverseRegistrar"
                          }
                        ],
                        "id": 3824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "825:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "825:21:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "307830",
                          "id": 3828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "858:3:18",
                          "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": 3827,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "850:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3829,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "850:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "825:37:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3839,
                  "nodeType": "IfStatement",
                  "src": "821:98:18",
                  "trueBody": {
                    "id": 3838,
                    "nodeType": "Block",
                    "src": "864:55:18",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 3834,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4133,
                                "src": "897:3:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 3835,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "897:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3831,
                              "name": "oldRegistrar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3816,
                              "src": "878:12:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                "typeString": "contract ReverseRegistrar"
                              }
                            },
                            "id": 3833,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claim",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3856,
                            "src": "878:18:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (address) external returns (bytes32)"
                            }
                          },
                          "id": 3836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "878:30:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 3837,
                        "nodeType": "ExpressionStatement",
                        "src": "878:30:18"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev Constructor\n@param ensAddr The address of the ENS registry.\n@param resolverAddr The address of the default reverse resolver.",
            "id": 3841,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3802,
                  "name": "ensAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3841,
                  "src": "550:11:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$3782",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3801,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3782,
                    "src": "550:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3782",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3804,
                  "name": "resolverAddr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3841,
                  "src": "563:21:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Resolver_$3793",
                    "typeString": "contract Resolver"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3803,
                    "name": "Resolver",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3793,
                    "src": "563:8:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Resolver_$3793",
                      "typeString": "contract Resolver"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "549:36:18"
            },
            "returnParameters": {
              "id": 3806,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "593:0:18"
            },
            "scope": 4009,
            "src": "538:387:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3855,
              "nodeType": "Block",
              "src": "1251:62:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3849,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "1286:5:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3851,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1301:3:18",
                            "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": 3850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1293:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3852,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1293:12:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3848,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3949,
                      "src": "1268:17:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3853,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1268:38:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3847,
                  "id": 3854,
                  "nodeType": "Return",
                  "src": "1261:45:18"
                }
              ]
            },
            "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": 3856,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3844,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3843,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3856,
                  "src": "1211:13:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1211:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1210:15:18"
            },
            "returnParameters": {
              "id": 3847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3846,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3856,
                  "src": "1242:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3845,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1242:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1241:9:18"
            },
            "scope": 4009,
            "src": "1196:117:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3948,
              "nodeType": "Block",
              "src": "1746:786:18",
              "statements": [
                {
                  "assignments": [
                    3866
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3866,
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 3948,
                      "src": "1756:13:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3865,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1756:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3871,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3868,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4133,
                          "src": "1787:3:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1787:10:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 3867,
                      "name": "sha3HexAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4008,
                      "src": "1772:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address) pure returns (bytes32)"
                      }
                    },
                    "id": 3870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1772:26:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1756:42:18"
                },
                {
                  "assignments": [
                    3873
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3873,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3948,
                      "src": "1808:12:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3872,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1808:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3881,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3877,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3796,
                            "src": "1850:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 3878,
                            "name": "label",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3866,
                            "src": "1869:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3875,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4120,
                            "src": "1833:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1833:16:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3879,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1833:42:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3874,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4127,
                      "src": "1823:9:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1823:53:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1808:68:18"
                },
                {
                  "assignments": [
                    3883
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3883,
                      "name": "currentOwner",
                      "nodeType": "VariableDeclaration",
                      "scope": 3948,
                      "src": "1886:20:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3882,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1886:7:18",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3888,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3886,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3873,
                        "src": "1919:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 3884,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3798,
                        "src": "1909:3:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3782",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 3885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3767,
                      "src": "1909:9:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 3887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1909:15:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1886:38:18"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3893,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3889,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "1982:8:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "307830",
                            "id": 3891,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2002:3:18",
                            "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": 3890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1994:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1994:12:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "1982:24:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3894,
                        "name": "resolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3860,
                        "src": "2010:8:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3897,
                            "name": "node",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3873,
                            "src": "2035:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3895,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3798,
                            "src": "2022:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$3782",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 3896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "resolver",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3774,
                          "src": "2022:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 3898,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2022:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2010:30:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1982:58:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3932,
                  "nodeType": "IfStatement",
                  "src": "1978:372:18",
                  "trueBody": {
                    "id": 3931,
                    "nodeType": "Block",
                    "src": "2042:308:18",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3901,
                            "name": "currentOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3883,
                            "src": "2125:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3903,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4151,
                                "src": "2149:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                  "typeString": "contract ReverseRegistrar"
                                }
                              ],
                              "id": 3902,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2141:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2141:13:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2125:29:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3923,
                        "nodeType": "IfStatement",
                        "src": "2121:174:18",
                        "trueBody": {
                          "id": 3922,
                          "nodeType": "Block",
                          "src": "2156:139:18",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3909,
                                    "name": "ADDR_REVERSE_NODE",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3796,
                                    "src": "2194:17:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3910,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3866,
                                    "src": "2213:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 3912,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4151,
                                        "src": "2228:4:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                          "typeString": "contract ReverseRegistrar"
                                        }
                                      ],
                                      "id": 3911,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2220:7:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": "address"
                                    },
                                    "id": 3913,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2220:13:18",
                                    "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": 3906,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3798,
                                    "src": "2174:3:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$3782",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 3908,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3739,
                                  "src": "2174:19:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,bytes32,address) external"
                                  }
                                },
                                "id": 3914,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2174:60:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3915,
                              "nodeType": "ExpressionStatement",
                              "src": "2174:60:18"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 3920,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 3916,
                                  "name": "currentOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3883,
                                  "src": "2252:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 3918,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4151,
                                      "src": "2275:4:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                                        "typeString": "contract ReverseRegistrar"
                                      }
                                    ],
                                    "id": 3917,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2267:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 3919,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2267:13:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "2252:28:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3921,
                              "nodeType": "ExpressionStatement",
                              "src": "2252:28:18"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3927,
                              "name": "node",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3873,
                              "src": "2324:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3928,
                              "name": "resolver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3860,
                              "src": "2330:8:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3924,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3798,
                              "src": "2308:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$3782",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3926,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setResolver",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3746,
                            "src": "2308:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) external"
                            }
                          },
                          "id": 3929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2308:31:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3930,
                        "nodeType": "ExpressionStatement",
                        "src": "2308:31:18"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3933,
                      "name": "currentOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3883,
                      "src": "2404:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3934,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3858,
                      "src": "2420:5:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2404:21:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3945,
                  "nodeType": "IfStatement",
                  "src": "2400:104:18",
                  "trueBody": {
                    "id": 3944,
                    "nodeType": "Block",
                    "src": "2427:77:18",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3939,
                              "name": "ADDR_REVERSE_NODE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3796,
                              "src": "2461:17:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3940,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3866,
                              "src": "2480:5:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3941,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3858,
                              "src": "2487:5:18",
                              "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": 3936,
                              "name": "ens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3798,
                              "src": "2441:3:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ENS_$3782",
                                "typeString": "contract ENS"
                              }
                            },
                            "id": 3938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "setSubnodeOwner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3739,
                            "src": "2441:19:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,bytes32,address) external"
                            }
                          },
                          "id": 3942,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2441:52:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3943,
                        "nodeType": "ExpressionStatement",
                        "src": "2441:52:18"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3946,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3873,
                    "src": "2521:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3864,
                  "id": 3947,
                  "nodeType": "Return",
                  "src": "2514:11:18"
                }
              ]
            },
            "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": 3949,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimWithResolver",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3858,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3949,
                  "src": "1688:13:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3857,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1688:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3860,
                  "name": "resolver",
                  "nodeType": "VariableDeclaration",
                  "scope": 3949,
                  "src": "1703:16:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3859,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1703:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1687:33:18"
            },
            "returnParameters": {
              "id": 3864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3863,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3949,
                  "src": "1737:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3862,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1737:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1736:9:18"
            },
            "scope": 4009,
            "src": "1661:871:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3976,
              "nodeType": "Block",
              "src": "2913:156:18",
              "statements": [
                {
                  "assignments": [
                    3957
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3957,
                      "name": "node",
                      "nodeType": "VariableDeclaration",
                      "scope": 3976,
                      "src": "2923:12:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 3956,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2923:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3966,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3960,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4151,
                            "src": "2964:4:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                              "typeString": "contract ReverseRegistrar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ReverseRegistrar_$4009",
                              "typeString": "contract ReverseRegistrar"
                            }
                          ],
                          "id": 3959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2956:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2956:13:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3963,
                            "name": "defaultResolver",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3800,
                            "src": "2979:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Resolver_$3793",
                              "typeString": "contract Resolver"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Resolver_$3793",
                              "typeString": "contract Resolver"
                            }
                          ],
                          "id": 3962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2971:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 3964,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2971:24:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3958,
                      "name": "claimWithResolver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3949,
                      "src": "2938:17:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (address,address) returns (bytes32)"
                      }
                    },
                    "id": 3965,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2938:58:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2923:73:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3970,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3957,
                        "src": "3030:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3971,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3951,
                        "src": "3036:4:18",
                        "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": 3967,
                        "name": "defaultResolver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3800,
                        "src": "3006:15:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Resolver_$3793",
                          "typeString": "contract Resolver"
                        }
                      },
                      "id": 3969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3792,
                      "src": "3006:23:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,string memory) external"
                      }
                    },
                    "id": 3972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3006:35:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3973,
                  "nodeType": "ExpressionStatement",
                  "src": "3006:35:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3974,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3957,
                    "src": "3058:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3955,
                  "id": 3975,
                  "nodeType": "Return",
                  "src": "3051:11:18"
                }
              ]
            },
            "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": 3977,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3952,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3951,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 3977,
                  "src": "2868:18:18",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3950,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2868:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2867:20:18"
            },
            "returnParameters": {
              "id": 3955,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3954,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3977,
                  "src": "2904:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3953,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2904:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2903:9:18"
            },
            "scope": 4009,
            "src": "2851:218:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3994,
              "nodeType": "Block",
              "src": "3295:92:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3987,
                            "name": "ADDR_REVERSE_NODE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3796,
                            "src": "3339:17:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3989,
                                "name": "addr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3979,
                                "src": "3373:4:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3988,
                              "name": "sha3HexAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4008,
                              "src": "3358:14:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                                "typeString": "function (address) pure returns (bytes32)"
                              }
                            },
                            "id": 3990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3358:20:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3985,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4120,
                            "src": "3322:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 3986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "3322:16:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 3991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3322:57:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 3984,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4127,
                      "src": "3312:9:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 3992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3312:68:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 3983,
                  "id": 3993,
                  "nodeType": "Return",
                  "src": "3305:75:18"
                }
              ]
            },
            "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": 3995,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "node",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3979,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "3251:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3978,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3251:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3250:14:18"
            },
            "returnParameters": {
              "id": 3983,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3982,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "3286:7:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3981,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3286:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3285:9:18"
            },
            "scope": 4009,
            "src": "3237:150:18",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4007,
              "nodeType": "Block",
              "src": "3761:553:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4002,
                    "name": "addr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3997,
                    "src": "3771:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4003,
                  "nodeType": "ExpressionStatement",
                  "src": "3771:4:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4004,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4000,
                    "src": "3785:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 4005,
                  "nodeType": "ExpressionStatement",
                  "src": "3785:3:18"
                },
                {
                  "externalReferences": [
                    {
                      "ret": {
                        "declaration": 4000,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4275:3:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4096:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4224:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4108:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4059:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4236:4:18",
                        "valueSize": 1
                      }
                    },
                    {
                      "addr": {
                        "declaration": 3997,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4187:4:18",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 4006,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\n    for {\n        let i := 40\n    }\n    gt(i, 0)\n    {\n    }\n    {\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n        i := sub(i, 1)\n        mstore8(i, byte(and(addr, 0xf), lookup))\n        addr := div(addr, 0x10)\n    }\n    ret := keccak256(0, 40)\n}",
                  "src": "3840:468:18"
                }
              ]
            },
            "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": 4008,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sha3HexAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3998,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3997,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 4008,
                  "src": "3712:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3996,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3712:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3711:14:18"
            },
            "returnParameters": {
              "id": 4001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4000,
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 4008,
                  "src": "3748:11:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3999,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3748:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3747:13:18"
            },
            "scope": 4009,
            "src": "3688:626:18",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "private"
          }
        ],
        "scope": 4010,
        "src": "132:4184:18"
      }
    ],
    "src": "0:4317:18"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.8+commit.23d335f2.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.16",
  "updatedAt": "2020-02-10T18:46:21.053Z",
  "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": {}
  }
}