{
  "contractName": "DNSRegistrar",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract DNSSEC",
          "name": "_dnssec",
          "type": "address"
        },
        {
          "internalType": "contract PublicSuffixList",
          "name": "_suffixes",
          "type": "address"
        },
        {
          "internalType": "contract ENS",
          "name": "_ens",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "dnsname",
          "type": "bytes"
        }
      ],
      "name": "Claim",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        }
      ],
      "name": "NewOracle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "suffixes",
          "type": "address"
        }
      ],
      "name": "NewPublicSuffixList",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "internalType": "contract ENS",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract DNSSEC",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "suffixes",
      "outputs": [
        {
          "internalType": "contract PublicSuffixList",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract DNSSEC",
          "name": "_dnssec",
          "type": "address"
        }
      ],
      "name": "setOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract PublicSuffixList",
          "name": "_suffixes",
          "type": "address"
        }
      ],
      "name": "setPublicSuffixList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "input",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "proveAndClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract DNSSEC\",\"name\":\"_dnssec\",\"type\":\"address\"},{\"internalType\":\"contract PublicSuffixList\",\"name\":\"_suffixes\",\"type\":\"address\"},{\"internalType\":\"contract ENS\",\"name\":\"_ens\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"dnsname\",\"type\":\"bytes\"}],\"name\":\"Claim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"NewOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"suffixes\",\"type\":\"address\"}],\"name\":\"NewPublicSuffixList\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"internalType\":\"contract ENS\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract DNSSEC\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\"}],\"name\":\"proveAndClaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract DNSSEC\",\"name\":\"_dnssec\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract PublicSuffixList\",\"name\":\"_suffixes\",\"type\":\"address\"}],\"name\":\"setPublicSuffixList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"suffixes\",\"outputs\":[{\"internalType\":\"contract PublicSuffixList\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"An ENS registrar that allows the owner of a DNS name to claim the      corresponding name in ENS.\",\"kind\":\"dev\",\"methods\":{\"claim(bytes,bytes)\":{\"details\":\"Claims a name by proving ownership of its DNS equivalent.\",\"params\":{\"name\":\"The name to claim, in DNS wire format.\",\"proof\":\"A DNS RRSet proving ownership of the name. Must be verified        in the DNSSEC oracle before calling. This RRSET must contain a TXT        record for '_ens.' + name, with the value 'a=0x...'. Ownership of        the name will be transferred to the address specified in the TXT        record.\"}},\"proveAndClaim(bytes,bytes,bytes)\":{\"details\":\"Submits proofs to the DNSSEC oracle, then claims a name using those proofs.\",\"params\":{\"input\":\"The data to be passed to the Oracle's `submitProofs` function. The last        proof must be the TXT record required by the registrar.\",\"name\":\"The name to claim, in DNS wire format.\",\"proof\":\"The proof record for the first element in input.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSRegistrar.sol\":\"DNSRegistrar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSClaimChecker.sol\":{\"keccak256\":\"0x09651e258e14992928296855b27f397bc7c03caf3787a3c11264cf6513e61f55\",\"urls\":[\"bzz-raw://f954dc0699fccaf7988a43f51b4c0cd9b969ab485527b8576d17b828377002d2\",\"dweb:/ipfs/Qme9Rqb1WjtjPuTNJ6tSrZdceQHQA4bzz2t88kJMDp4MNV\"]},\"/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSRegistrar.sol\":{\"keccak256\":\"0xf26530c81ed29677bcbb0c789b5663e4a0d7e390e252ba691e90cea0cf8ec549\",\"urls\":[\"bzz-raw://7ee72c14756a793c818aa3e1256e7aad6b25d325cb9694f59d24b6b85e417a52\",\"dweb:/ipfs/QmaqBXcNzpW6bchUtLmVJEXCE8GJCYkuz4zU89EBTykbL8\"]},\"/home/arachnid/Dropbox/projects/dnsregistrar/contracts/PublicSuffixList.sol\":{\"keccak256\":\"0xd830756b5f4c9b3139bd2031a4bc04d17699350fbcb2da39aac5d96ffd1563d4\",\"urls\":[\"bzz-raw://5c5d45d83f294c99301a5c1c543eb24785fb596c0ee229903a38d48f3958ca91\",\"dweb:/ipfs/QmNnipYj9w6h1ZsSRtmhEvFS6k8obRMW48FZURs1aUMdm6\"]},\"@ensdomains/buffer/contracts/Buffer.sol\":{\"keccak256\":\"0xa9ac824902ab6aaf6883432cd6f2a853186fcce568d63d04fa8143df6c5d6ebd\",\"urls\":[\"bzz-raw://99a06f0895b90759b92067c86b0eba1823bb6180ef4f3e3ed18abef2ec43eab9\",\"dweb:/ipfs/QmQVmiDPkuXZq94G6Mc3TChVrYzvEk3gbGLVoJrVKKf4uz\"]},\"@ensdomains/dnssec-oracle/contracts/BytesUtils.sol\":{\"keccak256\":\"0x17b0123a981825ac9445ec82c8e20288321b27139518ba1f81c4cbd06f1312ab\",\"urls\":[\"bzz-raw://fe03e00240c645751873f38f56cc3db12d19a82538a0f0e9648ccfc23e8a715d\",\"dweb:/ipfs/QmbT7Q7GUgkZFY5gA4RxhWg3anPKiH9EZoM6HWBKDkK7dp\"]},\"@ensdomains/dnssec-oracle/contracts/DNSSEC.sol\":{\"keccak256\":\"0x8657b615b0d13ca3c52be359127af8d4251b845255cf870ac30f3541eaa62db8\",\"urls\":[\"bzz-raw://2db577b2144ea6b7439d7a244b931b704ecea548bba5707df57528b56d528c81\",\"dweb:/ipfs/QmbjYLu3w6DrLvvY9fFCFBUc2mfjjvj2ULeEBKw6FXHR6q\"]},\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\":{\"keccak256\":\"0x52cca336743e65b57ce01a30bbc7ed8523758853ab7d35db57a6f40d4a3bf892\",\"urls\":[\"bzz-raw://feb1f75afcea14258289d466c9bfcb4cf648858791ff1780b5d3a4191e4158e2\",\"dweb:/ipfs/QmTc4vx6sEx9jW3Efu1QAFQQ7JTarfMDYwgv4FzZoxTWUx\"]},\"@ensdomains/ens/contracts/ENS.sol\":{\"keccak256\":\"0x376a1ab7c43ac7c922a5b7e39c7fcba8bc66409fb335ebcee2f8f45d485b1f31\",\"urls\":[\"bzz-raw://766025ff22caa14c68bb5341b843616f3da8b739924475f7dc4383b0482138fe\",\"dweb:/ipfs/QmWzCxvb6WnF9qHHX4np7f6QePXMqX59SDMuRu8vogYKAV\"]},\"@ensdomains/ens/contracts/ENSRegistry.sol\":{\"keccak256\":\"0x58ffab29a55073883763416cebdf9dcd3292e00fc24303468d082c8fd6cefb90\",\"urls\":[\"bzz-raw://bf3d02f1d97c0dcbe85067c7ecec744e3e1b12fab31493e9d88eca04184d6db8\",\"dweb:/ipfs/QmZXJoPcmMPVBtk8kcDreKUYRogzcm7jjnZB4JjAPYP7dE\"]},\"@ensdomains/root/contracts/Controllable.sol\":{\"keccak256\":\"0xde18e4c3e12b45f8de33790e6a42e5597ae559aeafb2aafbfb04c089683f2a9e\",\"urls\":[\"bzz-raw://951e2cf27f912eb4e61b9fff6b2f022a6a0bef5f53b01fd28ed91767d92063d7\",\"dweb:/ipfs/QmR2qd6hWEb5a6midcAStQFgPdqAG5ffGLitpTiaXYsZhp\"]},\"@ensdomains/root/contracts/Ownable.sol\":{\"keccak256\":\"0x251dc24ffd5b4187051ee7114230ffa9fc1ee66451cdd5c12fbe4d2369e006ec\",\"urls\":[\"bzz-raw://4a80ed2713bf6cc1b9bc047588770fae0d516e2079faaa70cbbb77673222f38e\",\"dweb:/ipfs/Qmepae9HDVfGbvMpumnEcxMeWQiKU1bKobbR784UrbbVo1\"]},\"@ensdomains/root/contracts/Root.sol\":{\"keccak256\":\"0x7a74f007b0dfabd449a93979b81e59570447ee380a55253b3a0cd340bfb2c75d\",\"urls\":[\"bzz-raw://223dac61eb046cf73315c6beec63f95bf1ba584f9081d56181808fc84c4e5337\",\"dweb:/ipfs/QmTbKg1MXrNbAQTfnRFsoKGc7YWzTkaVP9n2M6kGymcRfj\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506040516122113803806122118339818101604052606081101561003357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a181600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050612009806102086000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637adbf9731161005b5780637adbf9731461019c5780637dc0d1d0146101e0578063be27b22c14610214578063d94585bd1461036657610088565b806301ffc9a71461008d5780631ecfc411146100f057806330349ebe146101345780633f15457f14610168575b600080fd5b6100d8600480360360208110156100a357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061054f565b60405180821515815260200191505060405180910390f35b6101326004803603602081101561010657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610665565b005b61013c61088c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101706108b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101de600480360360208110156101b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108d8565b005b6101e8610afc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103646004803603604081101561022a57600080fd5b810190808035906020019064010000000081111561024757600080fd5b82018360208201111561025957600080fd5b8035906020019184600183028401116401000000008311171561027b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184600183028401116401000000008311171561031257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610b20565b005b61054d6004803603606081101561037c57600080fd5b810190808035906020019064010000000081111561039957600080fd5b8201836020820111156103ab57600080fd5b803590602001918460018302840111640100000000831117156103cd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561043057600080fd5b82018360208201111561044257600080fd5b8035906020019184600183028401116401000000008311171561046457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104c757600080fd5b8201836020820111156104d957600080fd5b803590602001918460018302840111640100000000831117156104fb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ee2565b005b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065e57507f7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db5805557fd94585bdbcfe8f813f622f992acac91edb949402317ea853110ee88dff8626337fbe27b22c9acdad36ca1f0f94c9fd0d70d9f9852f6e2a5bfda55706679287197018187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36000801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d602081101561070757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561076257600080fd5b505afa158015610776573d6000803e3d6000fd5b505050506040513d602081101561078c57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d757600080fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36000801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561095057600080fd5b505afa158015610964573d6000803e3d6000fd5b505050506040513d602081101561097a57600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d557600080fd5b505afa1580156109e9573d6000803e3d6000fd5b505050506040513d60208110156109ff57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4a57600080fd5b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b3660008461113190919063ffffffff16565b60ff1690506000610b53600183866111559092919063ffffffff16565b90506060610b756001840160018588510303876111789092919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f89059e826040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c05578082015181840152602081019050610bea565b50505050905090810190601f168015610c325780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610c4f57600080fd5b505afa158015610c63573d6000803e3d6000fd5b505050506040513d6020811015610c7957600080fd5b8101908080519060200190929190505050610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611f4b6023913960400191505060405180910390fd5b6000610cec826000611202565b90506000610d1b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888611665565b5080915050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238386846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610dbb57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b505050506040513d6020811015610de557600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff1682856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba39896040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e9f578082015181840152602081019050610e84565b50505050905090810190601f168015610ecc5780820380516001836020036101000a031916815260200191505b509250505060405180910390a350505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376a14d1d83836040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610f73578082015181840152602081019050610f58565b50505050905090810190601f168015610fa05780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610fd9578082015181840152602081019050610fbe565b50505050905090810190601f1680156110065780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561106557600080fd5b810190808051604051939291908464010000000082111561108557600080fd5b8382019150602082018581111561109b57600080fd5b82518660018202830111640100000000821117156110b857600080fd5b8083526020830192505050908051906020019080838360005b838110156110ec5780820151818401526020810190506110d1565b50505050905090810190601f1680156111195780820380516001836020036101000a031916815260200191505b50604052505050905061112c8382610b20565b505050565b600082828151811061113f57fe5b602001015160f81c60f81b60f81c905092915050565b60008351828401111561116757600080fd5b818360208601012090509392505050565b60608351828401111561118a57600080fd5b60608267ffffffffffffffff811180156111a357600080fd5b506040519080825280601f01601f1916602001820160405280156111d65781602001600182028036833780820191505090505b50905060008060208301915085602088010190506111f5828287611970565b8293505050509392505050565b600080611218838561113190919063ffffffff16565b60ff1690506000811415611232576000801b91505061165f565b600061124385600184870101611202565b9050600061125f6001860184886111559092919063ffffffff16565b9050818160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561130757600080fd5b505afa15801561131b573d6000803e3d6000fd5b505050506040513d602081101561133157600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806113aa57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6113ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611f6e602a913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461165a576000801b831415611581576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36000801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156114b557600080fd5b505afa1580156114c9573d6000803e3d6000fd5b505050506040513d60208110156114df57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16638cb8ecec84306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561156357600080fd5b505af1158015611577573d6000803e3d6000fd5b5050505050611659565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238484306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561161c57600080fd5b505af1158015611630573d6000803e3d6000fd5b505050506040513d602081101561164657600080fd5b8101908080519060200190929190505050505b5b505050505b92915050565b600080611670611ee5565b6116876005865101826119b990919063ffffffff16565b506116d06040518060400160405280600581526020017f045f656e7300000000000000000000000000000000000000000000000000000081525082611a0a90919063ffffffff16565b506116e48582611a0a90919063ffffffff16565b506000808773ffffffffffffffffffffffffffffffffffffffff1663087991bc601085600001516040518363ffffffff1660e01b8152600401808361ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611764578082015181840152602081019050611749565b50505050905090810190601f1680156117915780820380516001836020036101000a031916815260200191505b50935050505060606040518083038186803b1580156117af57600080fd5b505afa1580156117c3573d6000803e3d6000fd5b505050506040513d60608110156117d957600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509091508093508192505050600060601b6bffffffffffffffffffffffff1916826bffffffffffffffffffffffff191614801561183b575060008651145b1561184f5760008094509450505050611968565b85805190602001206bffffffffffffffffffffffff1916826bffffffffffffffffffffffff19161461188057600080fd5b611888611eff565b61189c600088611a2c90919063ffffffff16565b90505b6118a881611a56565b61195c5742816080015163ffffffff16830167ffffffffffffffff16101561191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180611f98603c913960400191505060405180910390fd5b60008061192c898460a00151611a6c565b8093508192505050811561194c5780600197509750505050505050611968565b505061195781611ae0565b61189f565b50600080945094505050505b935093915050565b5b602081106119945781518352602083019250602082019150602081039050611971565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6119c1611ee5565b6000602083816119cd57fe5b06146119e657602082816119dd57fe5b06602003820191505b81836020018181525050604051808452600081528281016040525082905092915050565b611a12611ee5565b611a2483846000015151848551611bf4565b905092915050565b611a34611eff565b828160000181905250818160c0018181525050611a5081611ae0565b92915050565b6000816000015151826020015110159050919050565b6000805b8351831015611ad1576000611a8e848661113190919063ffffffff16565b60ff169050600184019350600080611aa7878785611cb4565b80935081925050508115611ac45780600194509450505050611ad9565b8286019550505050611a70565b600080915091505b9250929050565b8060c00151816020018181525050806000015151816020015110611b0357611bf1565b6000611b1782600001518360200151611d15565b8260200151019050611b36818360000151611d7090919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050611b66818360000151611d7090919063ffffffff16565b826060019061ffff16908161ffff1681525050600281019050611b96818360000151611d9690919063ffffffff16565b826080019063ffffffff16908163ffffffff16815250506004810190506000611bcc828460000151611d7090919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b611bfc611ee5565b8251821115611c0a57600080fd5b8460200151856000015151838601011115611c3c57611c3b856002611c358860200151888701611dbe565b02611dda565b5b600080865180518760208301019350808887011115611c5b5787860182525b60208701925050505b60208410611c875780518252602082019150602081019050602084039350611c64565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b60008063613d3078611ccf8587611d9690919063ffffffff16565b63ffffffff1614611ce65760008091509150611d0d565b602c831015611cfb5760008091509150611d0d565b611d088560048601611dfe565b915091505b935093915050565b6000808290505b600115611d645783518110611d2d57fe5b6000611d42828661113190919063ffffffff16565b60ff16905060018101820191506000811415611d5e5750611d64565b50611d1c565b82810391505092915050565b60008251600283011115611d8357600080fd5b61ffff8260028501015116905092915050565b60008251600483011115611da957600080fd5b63ffffffff8260048501015116905092915050565b600081831115611dd057829050611dd4565b8190505b92915050565b606082600001519050611ded83836119b9565b50611df88382611a0a565b50505050565b6000806028838551031015611e195760008091509150611ede565b6000808490505b60288501811015611ed457600482901b91506000611e47828861113190919063ffffffff16565b60ff16905060308110158015611e5d5750603a81105b15611e6f576030810383179250611ec6565b60418110158015611e805750604781105b15611e92576037810383179250611ec5565b60618110158015611ea35750606781105b15611eb5576057810383179250611ec4565b60008094509450505050611ede565b5b5b508080600101915050611e20565b5080600192509250505b9250929050565b604051806040016040528060608152602001600081525090565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff1681526020016000815260200160008152509056fe506172656e74206e616d65206d7573742062652061207075626c69632073756666697843616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6d656f6e6520656c7365444e53207265636f7264206973207374616c653b2072656672657368206f722064656c657465206974206265666f72652070726f63656564696e672ea2646970667358221220a6f67d618aef0c73ae0ac9ae0c7798d0786e73fa84fda03d67861ff8a1c3cd2864736f6c63430007040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80637adbf9731161005b5780637adbf9731461019c5780637dc0d1d0146101e0578063be27b22c14610214578063d94585bd1461036657610088565b806301ffc9a71461008d5780631ecfc411146100f057806330349ebe146101345780633f15457f14610168575b600080fd5b6100d8600480360360208110156100a357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061054f565b60405180821515815260200191505060405180910390f35b6101326004803603602081101561010657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610665565b005b61013c61088c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101706108b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101de600480360360208110156101b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108d8565b005b6101e8610afc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103646004803603604081101561022a57600080fd5b810190808035906020019064010000000081111561024757600080fd5b82018360208201111561025957600080fd5b8035906020019184600183028401116401000000008311171561027b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156102de57600080fd5b8201836020820111156102f057600080fd5b8035906020019184600183028401116401000000008311171561031257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610b20565b005b61054d6004803603606081101561037c57600080fd5b810190808035906020019064010000000081111561039957600080fd5b8201836020820111156103ab57600080fd5b803590602001918460018302840111640100000000831117156103cd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561043057600080fd5b82018360208201111561044257600080fd5b8035906020019184600183028401116401000000008311171561046457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104c757600080fd5b8201836020820111156104d957600080fd5b803590602001918460018302840111640100000000831117156104fb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ee2565b005b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061065e57507f7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db5805557fd94585bdbcfe8f813f622f992acac91edb949402317ea853110ee88dff8626337fbe27b22c9acdad36ca1f0f94c9fd0d70d9f9852f6e2a5bfda55706679287197018187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36000801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d602081101561070757600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561076257600080fd5b505afa158015610776573d6000803e3d6000fd5b505050506040513d602081101561078c57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d757600080fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36000801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561095057600080fd5b505afa158015610964573d6000803e3d6000fd5b505050506040513d602081101561097a57600080fd5b8101908080519060200190929190505050905060008173ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d557600080fd5b505afa1580156109e9573d6000803e3d6000fd5b505050506040513d60208110156109ff57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4a57600080fd5b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b3660008461113190919063ffffffff16565b60ff1690506000610b53600183866111559092919063ffffffff16565b90506060610b756001840160018588510303876111789092919063ffffffff16565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634f89059e826040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c05578082015181840152602081019050610bea565b50505050905090810190601f168015610c325780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015610c4f57600080fd5b505afa158015610c63573d6000803e3d6000fd5b505050506040513d6020811015610c7957600080fd5b8101908080519060200190929190505050610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611f4b6023913960400191505060405180910390fd5b6000610cec826000611202565b90506000610d1b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888611665565b5080915050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238386846040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b158015610dbb57600080fd5b505af1158015610dcf573d6000803e3d6000fd5b505050506040513d6020811015610de557600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff1682856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba39896040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e9f578082015181840152602081019050610e84565b50505050905090810190601f168015610ecc5780820380516001836020036101000a031916815260200191505b509250505060405180910390a350505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376a14d1d83836040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015610f73578082015181840152602081019050610f58565b50505050905090810190601f168015610fa05780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610fd9578082015181840152602081019050610fbe565b50505050905090810190601f1680156110065780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561106557600080fd5b810190808051604051939291908464010000000082111561108557600080fd5b8382019150602082018581111561109b57600080fd5b82518660018202830111640100000000821117156110b857600080fd5b8083526020830192505050908051906020019080838360005b838110156110ec5780820151818401526020810190506110d1565b50505050905090810190601f1680156111195780820380516001836020036101000a031916815260200191505b50604052505050905061112c8382610b20565b505050565b600082828151811061113f57fe5b602001015160f81c60f81b60f81c905092915050565b60008351828401111561116757600080fd5b818360208601012090509392505050565b60608351828401111561118a57600080fd5b60608267ffffffffffffffff811180156111a357600080fd5b506040519080825280601f01601f1916602001820160405280156111d65781602001600182028036833780820191505090505b50905060008060208301915085602088010190506111f5828287611970565b8293505050509392505050565b600080611218838561113190919063ffffffff16565b60ff1690506000811415611232576000801b91505061165f565b600061124385600184870101611202565b9050600061125f6001860184886111559092919063ffffffff16565b9050818160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561130757600080fd5b505afa15801561131b573d6000803e3d6000fd5b505050506040513d602081101561133157600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806113aa57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6113ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611f6e602a913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461165a576000801b831415611581576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36000801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156114b557600080fd5b505afa1580156114c9573d6000803e3d6000fd5b505050506040513d60208110156114df57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff16638cb8ecec84306040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561156357600080fd5b505af1158015611577573d6000803e3d6000fd5b5050505050611659565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238484306040518463ffffffff1660e01b8152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561161c57600080fd5b505af1158015611630573d6000803e3d6000fd5b505050506040513d602081101561164657600080fd5b8101908080519060200190929190505050505b5b505050505b92915050565b600080611670611ee5565b6116876005865101826119b990919063ffffffff16565b506116d06040518060400160405280600581526020017f045f656e7300000000000000000000000000000000000000000000000000000081525082611a0a90919063ffffffff16565b506116e48582611a0a90919063ffffffff16565b506000808773ffffffffffffffffffffffffffffffffffffffff1663087991bc601085600001516040518363ffffffff1660e01b8152600401808361ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611764578082015181840152602081019050611749565b50505050905090810190601f1680156117915780820380516001836020036101000a031916815260200191505b50935050505060606040518083038186803b1580156117af57600080fd5b505afa1580156117c3573d6000803e3d6000fd5b505050506040513d60608110156117d957600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509091508093508192505050600060601b6bffffffffffffffffffffffff1916826bffffffffffffffffffffffff191614801561183b575060008651145b1561184f5760008094509450505050611968565b85805190602001206bffffffffffffffffffffffff1916826bffffffffffffffffffffffff19161461188057600080fd5b611888611eff565b61189c600088611a2c90919063ffffffff16565b90505b6118a881611a56565b61195c5742816080015163ffffffff16830167ffffffffffffffff16101561191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180611f98603c913960400191505060405180910390fd5b60008061192c898460a00151611a6c565b8093508192505050811561194c5780600197509750505050505050611968565b505061195781611ae0565b61189f565b50600080945094505050505b935093915050565b5b602081106119945781518352602083019250602082019150602081039050611971565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6119c1611ee5565b6000602083816119cd57fe5b06146119e657602082816119dd57fe5b06602003820191505b81836020018181525050604051808452600081528281016040525082905092915050565b611a12611ee5565b611a2483846000015151848551611bf4565b905092915050565b611a34611eff565b828160000181905250818160c0018181525050611a5081611ae0565b92915050565b6000816000015151826020015110159050919050565b6000805b8351831015611ad1576000611a8e848661113190919063ffffffff16565b60ff169050600184019350600080611aa7878785611cb4565b80935081925050508115611ac45780600194509450505050611ad9565b8286019550505050611a70565b600080915091505b9250929050565b8060c00151816020018181525050806000015151816020015110611b0357611bf1565b6000611b1782600001518360200151611d15565b8260200151019050611b36818360000151611d7090919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050611b66818360000151611d7090919063ffffffff16565b826060019061ffff16908161ffff1681525050600281019050611b96818360000151611d9690919063ffffffff16565b826080019063ffffffff16908163ffffffff16815250506004810190506000611bcc828460000151611d7090919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b611bfc611ee5565b8251821115611c0a57600080fd5b8460200151856000015151838601011115611c3c57611c3b856002611c358860200151888701611dbe565b02611dda565b5b600080865180518760208301019350808887011115611c5b5787860182525b60208701925050505b60208410611c875780518252602082019150602081019050602084039350611c64565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b60008063613d3078611ccf8587611d9690919063ffffffff16565b63ffffffff1614611ce65760008091509150611d0d565b602c831015611cfb5760008091509150611d0d565b611d088560048601611dfe565b915091505b935093915050565b6000808290505b600115611d645783518110611d2d57fe5b6000611d42828661113190919063ffffffff16565b60ff16905060018101820191506000811415611d5e5750611d64565b50611d1c565b82810391505092915050565b60008251600283011115611d8357600080fd5b61ffff8260028501015116905092915050565b60008251600483011115611da957600080fd5b63ffffffff8260048501015116905092915050565b600081831115611dd057829050611dd4565b8190505b92915050565b606082600001519050611ded83836119b9565b50611df88382611a0a565b50505050565b6000806028838551031015611e195760008091509150611ede565b6000808490505b60288501811015611ed457600482901b91506000611e47828861113190919063ffffffff16565b60ff16905060308110158015611e5d5750603a81105b15611e6f576030810383179250611ec6565b60418110158015611e805750604781105b15611e92576037810383179250611ec5565b60618110158015611ea35750606781105b15611eb5576057810383179250611ec4565b60008094509450505050611ede565b5b5b508080600101915050611e20565b5080600192509250505b9250929050565b604051806040016040528060608152602001600081525090565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff1681526020016000815260200160008152509056fe506172656e74206e616d65206d7573742062652061207075626c69632073756666697843616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6d656f6e6520656c7365444e53207265636f7264206973207374616c653b2072656672657368206f722064656c657465206974206265666f72652070726f63656564696e672ea2646970667358221220a6f67d618aef0c73ae0ac9ae0c7798d0786e73fa84fda03d67861ff8a1c3cd2864736f6c63430007040033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "424:4337:1:-:0;;;1020:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1112:7;1103:6;;:16;;;;;;;;;;;;;;;;;;1134:26;1152:6;;;;;;;;;;1134:26;;;;;;;;;;;;;;;;;;;;1181:9;1170:8;;:20;;;;;;;;;;;;;;;;;;1205:38;1233:8;;;;;;;;;;;1205:38;;;;;;;;;;;;;;;;;;;;1259:4;1253:3;;:10;;;;;;;;;;;;;;;;;;1020:250;;;424:4337;;;;;;",
  "deployedSourceMap": "424:4337:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3699:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1686:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;531:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;511:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1554:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;485:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2342:777;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3518:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3699:181;3769:4;621:38;3792:32;;;:11;:32;;;;:81;;;;822:21;766:45;724:31;:87;:119;3843:30;;;:11;:30;;;;3792:81;3785:88;;3699:181;;;:::o;1686:164::-;1415:9;1432:3;;;;;;;;;;;:9;;;1450:1;1442:10;;1432:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1415:39;;1464:13;1480:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1464:28;;1524:5;1510:19;;:10;:19;;;1502:28;;;;;;1781:9:::1;1770:8;;:20;;;;;;;;;;;;;;;;;;1805:38;1833:8;;;;;;;;;;;1805:38;;;;;;;;;;;;;;;;;;;;1686:164:::0;;;:::o;531:32::-;;;;;;;;;;;;;:::o;511:14::-;;;;;;;;;;;;;:::o;1554:126::-;1415:9;1432:3;;;;;;;;;;;:9;;;1450:1;1442:10;;1432:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1415:39;;1464:13;1480:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1464:28;;1524:5;1510:19;;:10;:19;;;1502:28;;;;;;1625:7:::1;1616:6;::::0;:16:::1;;;;;;;;;;;;;;;;;;1647:26;1665:6;::::0;::::1;;;;;;;;1647:26;;;;;;;;;;;;;;;;;;;;1554:126:::0;;;:::o;485:20::-;;;;;;;;;;;;:::o;2342:777::-;2444:13;2460:17;2475:1;2460:4;:14;;:17;;;;:::i;:::-;2444:33;;;;2487:17;2507:24;2519:1;2522:8;2507:4;:11;;:24;;;;;:::i;:::-;2487:44;;2600:23;2626:56;2652:1;2641:8;:12;2680:1;2669:8;2655:4;:11;:22;:26;2626:4;:14;;:56;;;;;:::i;:::-;2600:82;;2700:8;;;;;;;;;;;:23;;;2724:10;2700:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2692:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2834:16;2853:25;2864:10;2876:1;2853:10;:25::i;:::-;2834:44;;2889:12;2921:52;2953:6;;;;;;;;;;2961:4;2967:5;2921:31;:52::i;:::-;2911:62;;;;;2984:3;;;;;;;;;;;:19;;;3004:8;3014:9;3025:4;2984:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3101:4;3045:67;;3078:8;3088:9;3061:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3051:48;;;;;;3045:67;3107:4;3045:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2342:777;;;;;;;:::o;3518:175::-;3625:6;;;;;;;;;;:19;;;3645:5;3652;3625:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3617:41;;3668:18;3674:4;3680:5;3668;:18::i;:::-;3518:175;;;:::o;5330:122:7:-;5401:9;5435:4;5440:3;5435:9;;;;;;;;;;;;;;;;5429:16;;5422:23;;5330:122;;;;:::o;305:238::-;386:11;433:4;:11;426:3;417:6;:12;:27;;409:36;;;;;;523:3;514:6;509:2;503:4;499:13;495:26;485:42;478:49;;464:73;;;;;:::o;8682:393::-;8765:12;8813:4;:11;8806:3;8797:6;:12;:27;;8789:36;;;;;;8836:16;8865:3;8855:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8836:33;;8879:9;8898:8;8957:2;8952:3;8948:12;8940:20;;8999:6;8994:2;8988:4;8984:13;8980:26;8973:33;;9025:22;9032:4;9038:3;9043;9025:6;:22::i;:::-;9065:3;9058:10;;;;;8682:393;;;;;:::o;3886:873:1:-;3957:12;3981:8;3992:24;4009:6;3992;:16;;:24;;;;:::i;:::-;3981:35;;;;4036:1;4029:3;:8;4026:55;;;4068:1;4060:10;;4053:17;;;;;4026:55;4091:18;4112:36;4123:6;4146:1;4140:3;4131:6;:12;:16;4112:10;:36::i;:::-;4091:57;;4158:13;4174:30;4197:1;4188:6;:10;4200:3;4174:6;:13;;:30;;;;;:::i;:::-;4158:46;;4248:10;4260:5;4231:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4221:46;;;;;;4214:53;;4277:13;4293:3;;;;;;;;;;;:9;;;4303:4;4293:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4277:31;;4343:1;4326:19;;:5;:19;;;:45;;;;4366:4;4349:22;;:5;:22;;;4326:45;4318:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4448:4;4431:22;;:5;:22;;;4428:304;;4494:1;4486:10;;4472;:24;4469:253;;;4516:9;4533:3;;;;;;;;;;;:9;;;4551:1;4543:10;;4533:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4516:39;;4573:4;:20;;;4594:5;4609:4;4573:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4469:253;;;;4654:3;;;;;;;;;;;:19;;;4674:10;4686:5;4701:4;4654:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4469:253;4428:304;4741:11;;;;3886:873;;;;;:::o;449:1108:0:-;575:7;584:4;653:24;;:::i;:::-;687:25;710:1;696:4;:11;:15;687:3;:8;;:25;;;;:::i;:::-;;722:22;;;;;;;;;;;;;;;;;;:3;:10;;:22;;;;:::i;:::-;;754:16;765:4;754:3;:10;;:16;;;;:::i;:::-;;780:12;802:15;922:6;:13;;;440:2;946:3;:7;;;922:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;901:53;;;;;;;;;;;984:1;976:10;;968:18;;;:4;:18;;;;:39;;;;;1006:1;990:5;:12;:17;968:39;964:73;;;1025:3;1031:5;1009:28;;;;;;;;;964:73;1082:5;1072:16;;;;;;1056:33;;;:4;:33;;;;1048:42;;;;;;1106:30;;:::i;:::-;1139:19;1156:1;1139:5;:16;;:19;;;;:::i;:::-;1106:52;;1101:411;1161:11;:4;:9;:11::i;:::-;1101:411;;1232:15;1220:4;:8;;;1209:19;;:8;:19;:38;;;;1201:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1327:10;1351:12;1393:32;1401:5;1408:4;:16;;;1393:7;:32::i;:::-;1377:48;;;;;;;;1443:5;1439:63;;;1476:4;1482;1468:19;;;;;;;;;;;;1439:63;1101:411;;1174:11;:4;:9;:11::i;:::-;1101:411;;;;1538:3;1544:5;1522:28;;;;;;;449:1108;;;;;;;:::o;7913:549:7:-;8033:165;8047:2;8040:3;:9;8033:165;;8122:3;8116:10;8110:4;8103:24;8162:2;8154:10;;;;8185:2;8178:9;;;;8058:2;8051:9;;;;8033:165;;;8240:9;8272:1;8265:3;8260:2;:8;8252:3;:17;:21;8240:33;;8341:4;8337:9;8331:3;8325:10;8321:26;8393:4;8386;8380:11;8376:22;8437:7;8427:8;8424:21;8418:4;8411:35;8292:164;;;;;;:::o;978:446:6:-;1048:13;;:::i;:::-;1094:1;1088:2;1077:8;:13;;;;;;:18;1073:81;;1140:2;1129:8;:13;;;;;;1123:2;:20;1111:32;;;;1073:81;1224:8;1209:3;:12;;:23;;;;;1282:4;1276:11;1312:3;1307;1300:16;1341:1;1336:3;1329:14;1378:8;1373:3;1369:18;1363:4;1356:32;1251:147;1414:3;1407:10;;978:446;;;;:::o;4954:161::-;5031:13;;:::i;:::-;5063:45;5069:3;5074;:7;;;:14;5090:4;5096;:11;5063:5;:45::i;:::-;5056:52;;4954:161;;;;:::o;3831:182:9:-;3906:21;;:::i;:::-;3950:4;3939:3;:8;;:15;;;;3981:6;3964:3;:14;;:23;;;;;3997:9;4002:3;3997:4;:9::i;:::-;3831:182;;;;:::o;4184:121::-;4244:4;4282;:9;;;:16;4267:4;:11;;;:31;;4260:38;;4184:121;;;:::o;1563:411:0:-;1633:7;1642:4;1658:271;1671:5;:12;1665:3;:18;1658:271;;;1699:8;1710:20;1726:3;1710:5;:15;;:20;;;;:::i;:::-;1699:31;;;;1739:1;1732:8;;;;1755:10;1779:12;1821:28;1833:5;1840:3;1845;1821:11;:28::i;:::-;1805:44;;;;;;;;1868:5;1864:30;;;1883:4;1889;1875:19;;;;;;;;;1864:30;1915:3;1908:10;;;;1658:271;;;;;;1955:3;1961:5;1939:28;;;;1563:411;;;;;;:::o;4428:682:9:-;4504:4;:15;;;4490:4;:11;;:29;;;;;4548:4;:9;;;:16;4533:4;:11;;;:31;4529:68;;4580:7;;4529:68;4632:8;4657:34;4668:4;:9;;;4679:4;:11;;;4657:10;:34::i;:::-;4643:4;:11;;;:48;4632:59;;4754:25;4775:3;4754:4;:9;;;:20;;:25;;;;:::i;:::-;4739:4;:12;;:40;;;;;;;;;;;4796:1;4789:8;;;;4820:25;4841:3;4820:4;:9;;;:20;;:25;;;;:::i;:::-;4807:4;:10;;:38;;;;;;;;;;;4862:1;4855:8;;;;4884:25;4905:3;4884:4;:9;;;:20;;:25;;;;:::i;:::-;4873:4;:8;;:36;;;;;;;;;;;4926:1;4919:8;;;;4964:16;4983:25;5004:3;4983:4;:9;;;:20;;:25;;;;:::i;:::-;4964:44;;;;5025:1;5018:8;;;;5055:3;5036:4;:16;;:22;;;;;5092:11;5086:3;:17;5068:4;:15;;:35;;;;;4428:682;;;;:::o;2866:1343:6:-;2961:13;;:::i;:::-;3001:4;:11;2994:3;:18;;2986:27;;;;;;3057:3;:12;;;3040:3;:7;;;:14;3034:3;3028;:9;:26;:41;3024:117;;;3085:45;3092:3;3128:1;3097:28;3101:3;:12;;;3121:3;3115;:9;3097:3;:28::i;:::-;:32;3085:6;:45::i;:::-;3024:117;3151:9;3170:8;3280:3;3274:10;3363:6;3357:13;3491:3;3486:2;3478:6;3474:15;3470:25;3462:33;;3587:6;3581:3;3576;3572:13;3569:25;3566:2;;;3637:3;3632;3628:13;3620:6;3613:29;3566:2;3686;3680:4;3676:13;3669:20;;3197:502;;3759:165;3773:2;3766:3;:9;3759:165;;3848:3;3842:10;3836:4;3829:24;3888:2;3880:10;;;;3911:2;3904:9;;;;3784:2;3777:9;;;;3759:165;;;3966:9;3998:1;3991:3;3986:2;:8;3978:3;:17;:21;3966:33;;4067:4;4063:9;4057:3;4051:10;4047:26;4119:4;4112;4106:11;4102:22;4163:7;4153:8;4150:21;4144:4;4137:35;4018:164;;4199:3;4192:10;;;;;2866:1343;;;;;;:::o;1980:390:0:-;2062:7;2071:4;2204:10;2181:19;2196:3;2181;:14;;:19;;;;:::i;:::-;:33;;;2177:67;;2232:3;2238:5;2216:28;;;;;;2177:67;2288:2;2282:3;:8;2278:42;;;2308:3;2314:5;2292:28;;;;;;2278:42;2337:26;2350:3;2361:1;2355:3;:7;2337:12;:26::i;:::-;2330:33;;;;1980:390;;;;;;;:::o;534:367:9:-;608:4;624:8;635:6;624:17;;651:215;658:4;651:215;;;691:4;:11;685:3;:17;678:25;;;;717:13;733:19;748:3;733:4;:14;;:19;;;;:::i;:::-;717:35;;;;784:1;773:8;:12;766:19;;;;815:1;803:8;:13;799:57;;;836:5;;;799:57;651:215;;;;888:6;882:3;:12;875:19;;;534:367;;;;:::o;5696:223:7:-;5768:10;5809:4;:11;5804:1;5798:3;:7;:22;;5790:31;;;;;;5896:6;5889:3;5885:1;5879:4;5875:12;5871:22;5865:29;5861:42;5854:49;;5840:73;;;;:::o;6163:227::-;6235:10;6276:4;:11;6271:1;6265:3;:7;:22;;6257:31;;;;;;6363:10;6356:3;6352:1;6346:4;6342:12;6338:22;6332:29;6328:46;6321:53;;6307:77;;;;:::o;2026:134:6:-;2076:4;2100:1;2096;:5;2092:44;;;2124:1;2117:8;;;;2092:44;2152:1;2145:8;;2026:134;;;;;:::o;1853:167::-;1926:19;1948:3;:7;;;1926:29;;1965:19;1970:3;1975:8;1965:4;:19::i;:::-;;1994;2001:3;2006:6;1994;:19::i;:::-;;1853:167;;;:::o;2376:639:0:-;2449:7;2458:4;2497:2;2491:3;2478;:10;:16;:21;2474:55;;;2517:3;2523:5;2501:28;;;;;;2474:55;2539:8;2566:6;2575:3;2566:12;;2561:411;2590:2;2584:3;:8;2580:1;:12;2561:411;;;2621:1;2613:9;;;;;2636:6;2645:16;2659:1;2645:3;:13;;:16;;;;:::i;:::-;2636:25;;;;2684:2;2679:1;:7;;:17;;;;;2694:2;2690:1;:6;2679:17;2675:287;;;2727:2;2723:1;:6;2716:13;;;;2675:287;;;2759:2;2754:1;:7;;:17;;;;;2769:2;2765:1;:6;2754:17;2750:212;;;2802:2;2798:1;:6;2791:13;;;;2750:212;;;2834:2;2829:1;:7;;:18;;;;;2844:3;2840:1;:7;2829:18;2825:137;;;2878:2;2874:1;:6;2867:13;;;;2825:137;;;2935:3;2941:5;2919:28;;;;;;;;;2825:137;2750:212;2675:287;2561:411;2594:3;;;;;;;2561:411;;;;2997:3;3003:4;2981:27;;;;;2376:639;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.7.0;\n\nimport \"@ensdomains/dnssec-oracle/contracts/BytesUtils.sol\";\nimport \"@ensdomains/dnssec-oracle/contracts/DNSSEC.sol\";\nimport \"@ensdomains/ens/contracts/ENSRegistry.sol\";\nimport \"@ensdomains/root/contracts/Root.sol\";\nimport \"./DNSClaimChecker.sol\";\nimport \"./PublicSuffixList.sol\";\n\n/**\n * @dev An ENS registrar that allows the owner of a DNS name to claim the\n *      corresponding name in ENS.\n */\ncontract DNSRegistrar {\n    using BytesUtils for bytes;\n\n    DNSSEC public oracle;\n    ENS public ens;\n    PublicSuffixList public suffixes;\n\n    bytes4 constant private INTERFACE_META_ID = bytes4(keccak256(\"supportsInterface(bytes4)\"));\n    bytes4 constant private DNSSEC_CLAIM_ID = bytes4(\n        keccak256(\"claim(bytes,bytes)\") ^\n        keccak256(\"proveAndClaim(bytes,bytes,bytes)\") ^\n        keccak256(\"oracle()\")\n    );\n\n    event Claim(bytes32 indexed node, address indexed owner, bytes dnsname);\n    event NewOracle(address oracle);\n    event NewPublicSuffixList(address suffixes);\n\n    constructor(DNSSEC _dnssec, PublicSuffixList _suffixes, ENS _ens) public {\n        oracle = _dnssec;\n        emit NewOracle(address(oracle));\n        suffixes = _suffixes;\n        emit NewPublicSuffixList(address(suffixes));\n        ens = _ens;\n    }\n\n    /**\n     * @dev This contract's owner-only functions can be invoked by the owner of the ENS root.\n     */\n    modifier onlyOwner {\n        Root root = Root(ens.owner(bytes32(0)));\n        address owner = root.owner();\n        require(msg.sender == owner);\n        _;\n    }\n\n    function setOracle(DNSSEC _dnssec) public onlyOwner {\n        oracle = _dnssec;\n        emit NewOracle(address(oracle));\n    }\n\n    function setPublicSuffixList(PublicSuffixList _suffixes) public onlyOwner {\n        suffixes = _suffixes;\n        emit NewPublicSuffixList(address(suffixes));\n    }\n\n    /**\n     * @dev Claims a name by proving ownership of its DNS equivalent.\n     * @param name The name to claim, in DNS wire format.\n     * @param proof A DNS RRSet proving ownership of the name. Must be verified\n     *        in the DNSSEC oracle before calling. This RRSET must contain a TXT\n     *        record for '_ens.' + name, with the value 'a=0x...'. Ownership of\n     *        the name will be transferred to the address specified in the TXT\n     *        record.\n     */\n    function claim(bytes memory name, bytes memory proof) public {\n        // Get the first label\n        uint labelLen = name.readUint8(0);\n        bytes32 labelHash = name.keccak(1, labelLen);\n\n        // Parent name must be in the public suffix list.\n        bytes memory parentName = name.substring(labelLen + 1, name.length - labelLen - 1);\n        require(suffixes.isPublicSuffix(parentName), \"Parent name must be a public suffix\");\n\n        // Make sure the parent name is enabled\n        bytes32 rootNode = enableNode(parentName, 0);\n\n        address addr;\n        (addr,) = DNSClaimChecker.getOwnerAddress(oracle, name, proof);\n\n        ens.setSubnodeOwner(rootNode, labelHash, addr);\n        emit Claim(keccak256(abi.encodePacked(rootNode, labelHash)), addr, name);\n    }\n\n    /**\n     * @dev Submits proofs to the DNSSEC oracle, then claims a name using those proofs.\n     * @param name The name to claim, in DNS wire format.\n     * @param input The data to be passed to the Oracle's `submitProofs` function. The last\n     *        proof must be the TXT record required by the registrar.\n     * @param proof The proof record for the first element in input.\n     */\n    function proveAndClaim(bytes memory name, bytes memory input, bytes memory proof) public {\n        proof = oracle.submitRRSets(input, proof);\n        claim(name, proof);\n    }\n\n    function supportsInterface(bytes4 interfaceID) external pure returns (bool) {\n        return interfaceID == INTERFACE_META_ID ||\n               interfaceID == DNSSEC_CLAIM_ID;\n    }\n\n    function enableNode(bytes memory domain, uint offset) internal returns(bytes32 node) {\n        uint len = domain.readUint8(offset);\n        if(len == 0) {\n            return bytes32(0);\n        }\n\n        bytes32 parentNode = enableNode(domain, offset + len + 1);\n        bytes32 label = domain.keccak(offset + 1, len);\n        node = keccak256(abi.encodePacked(parentNode, label));\n        address owner = ens.owner(node);\n        require(owner == address(0) || owner == address(this), \"Cannot enable a name owned by someone else\");\n        if(owner != address(this)) {\n            if(parentNode == bytes32(0)) {\n                Root root = Root(ens.owner(bytes32(0)));\n                root.setSubnodeOwner(label, address(this));\n            } else {\n                ens.setSubnodeOwner(parentNode, label, address(this));\n            }\n        }\n        return node;\n    }\n}\n",
  "sourcePath": "/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSRegistrar.sol",
  "ast": {
    "absolutePath": "/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSRegistrar.sol",
    "exportedSymbols": {
      "Buffer": [
        1452
      ],
      "BytesUtils": [
        2183
      ],
      "Controllable": [
        4004
      ],
      "DNSClaimChecker": [
        390
      ],
      "DNSRegistrar": [
        814
      ],
      "DNSSEC": [
        2273
      ],
      "ENS": [
        3533
      ],
      "ENSRegistry": [
        3956
      ],
      "Ownable": [
        4064
      ],
      "PublicSuffixList": [
        881
      ],
      "RRUtils": [
        3396
      ],
      "Root": [
        4178
      ]
    },
    "id": 815,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 392,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "@ensdomains/dnssec-oracle/contracts/BytesUtils.sol",
        "file": "@ensdomains/dnssec-oracle/contracts/BytesUtils.sol",
        "id": 393,
        "nodeType": "ImportDirective",
        "scope": 815,
        "sourceUnit": 2184,
        "src": "25:60:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
        "file": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
        "id": 394,
        "nodeType": "ImportDirective",
        "scope": 815,
        "sourceUnit": 2274,
        "src": "86:56:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
        "file": "@ensdomains/ens/contracts/ENSRegistry.sol",
        "id": 395,
        "nodeType": "ImportDirective",
        "scope": 815,
        "sourceUnit": 3957,
        "src": "143:51:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/root/contracts/Root.sol",
        "file": "@ensdomains/root/contracts/Root.sol",
        "id": 396,
        "nodeType": "ImportDirective",
        "scope": 815,
        "sourceUnit": 4179,
        "src": "195:45:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSClaimChecker.sol",
        "file": "./DNSClaimChecker.sol",
        "id": 397,
        "nodeType": "ImportDirective",
        "scope": 815,
        "sourceUnit": 391,
        "src": "241:31:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/arachnid/Dropbox/projects/dnsregistrar/contracts/PublicSuffixList.sol",
        "file": "./PublicSuffixList.sol",
        "id": 398,
        "nodeType": "ImportDirective",
        "scope": 815,
        "sourceUnit": 882,
        "src": "273:32:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 399,
          "nodeType": "StructuredDocumentation",
          "src": "307:116:1",
          "text": " @dev An ENS registrar that allows the owner of a DNS name to claim the\n      corresponding name in ENS."
        },
        "fullyImplemented": true,
        "id": 814,
        "linearizedBaseContracts": [
          814
        ],
        "name": "DNSRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 402,
            "libraryName": {
              "id": 400,
              "name": "BytesUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2183,
              "src": "458:10:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BytesUtils_$2183",
                "typeString": "library BytesUtils"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "452:27:1",
            "typeName": {
              "id": 401,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "473:5:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "constant": false,
            "functionSelector": "7dc0d1d0",
            "id": 404,
            "mutability": "mutable",
            "name": "oracle",
            "nodeType": "VariableDeclaration",
            "scope": 814,
            "src": "485:20:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DNSSEC_$2273",
              "typeString": "contract DNSSEC"
            },
            "typeName": {
              "id": 403,
              "name": "DNSSEC",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2273,
              "src": "485:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DNSSEC_$2273",
                "typeString": "contract DNSSEC"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "3f15457f",
            "id": 406,
            "mutability": "mutable",
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 814,
            "src": "511:14:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$3533",
              "typeString": "contract ENS"
            },
            "typeName": {
              "id": 405,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3533,
              "src": "511:3:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$3533",
                "typeString": "contract ENS"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "30349ebe",
            "id": 408,
            "mutability": "mutable",
            "name": "suffixes",
            "nodeType": "VariableDeclaration",
            "scope": 814,
            "src": "531:32:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_PublicSuffixList_$881",
              "typeString": "contract PublicSuffixList"
            },
            "typeName": {
              "id": 407,
              "name": "PublicSuffixList",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 881,
              "src": "531:16:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                "typeString": "contract PublicSuffixList"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 416,
            "mutability": "constant",
            "name": "INTERFACE_META_ID",
            "nodeType": "VariableDeclaration",
            "scope": 814,
            "src": "570:90:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 409,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "570:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "hexValue": "737570706f727473496e746572666163652862797465733429",
                      "id": 413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "631:27:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2",
                        "typeString": "literal_string \"supportsInterface(bytes4)\""
                      },
                      "value": "supportsInterface(bytes4)"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_stringliteral_01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2",
                        "typeString": "literal_string \"supportsInterface(bytes4)\""
                      }
                    ],
                    "id": 412,
                    "name": "keccak256",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": -8,
                    "src": "621:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                      "typeString": "function (bytes memory) pure returns (bytes32)"
                    }
                  },
                  "id": 414,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "621:38:1",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                ],
                "id": 411,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "614:6:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes4_$",
                  "typeString": "type(bytes4)"
                },
                "typeName": {
                  "id": 410,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "614:6:1",
                  "typeDescriptions": {}
                }
              },
              "id": 415,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "614:46:1",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 432,
            "mutability": "constant",
            "name": "DNSSEC_CLAIM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 814,
            "src": "666:183:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 417,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "666:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "arguments": [
                {
                  "commonType": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "id": 430,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "leftExpression": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "hexValue": "636c61696d2862797465732c627974657329",
                          "id": 421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "734:20:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_be27b22c9acdad36ca1f0f94c9fd0d70d9f9852f6e2a5bfda557066792871970",
                            "typeString": "literal_string \"claim(bytes,bytes)\""
                          },
                          "value": "claim(bytes,bytes)"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_be27b22c9acdad36ca1f0f94c9fd0d70d9f9852f6e2a5bfda557066792871970",
                            "typeString": "literal_string \"claim(bytes,bytes)\""
                          }
                        ],
                        "id": 420,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "724:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "724:31:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "^",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "70726f7665416e64436c61696d2862797465732c62797465732c627974657329",
                          "id": 424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "776:34:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_d94585bdbcfe8f813f622f992acac91edb949402317ea853110ee88dff862633",
                            "typeString": "literal_string \"proveAndClaim(bytes,bytes,bytes)\""
                          },
                          "value": "proveAndClaim(bytes,bytes,bytes)"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_d94585bdbcfe8f813f622f992acac91edb949402317ea853110ee88dff862633",
                            "typeString": "literal_string \"proveAndClaim(bytes,bytes,bytes)\""
                          }
                        ],
                        "id": 423,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "766:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 425,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "766:45:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "724:87:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "BinaryOperation",
                  "operator": "^",
                  "rightExpression": {
                    "arguments": [
                      {
                        "hexValue": "6f7261636c652829",
                        "id": 428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "832:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db580555",
                          "typeString": "literal_string \"oracle()\""
                        },
                        "value": "oracle()"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db580555",
                          "typeString": "literal_string \"oracle()\""
                        }
                      ],
                      "id": 427,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "822:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "822:21:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "src": "724:119:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                ],
                "id": 419,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "708:6:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes4_$",
                  "typeString": "type(bytes4)"
                },
                "typeName": {
                  "id": 418,
                  "name": "bytes4",
                  "nodeType": "ElementaryTypeName",
                  "src": "708:6:1",
                  "typeDescriptions": {}
                }
              },
              "id": 431,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "708:141:1",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "id": 440,
            "name": "Claim",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 439,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 434,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 440,
                  "src": "868:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 433,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "868:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 436,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 440,
                  "src": "890:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 435,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "890:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 438,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "dnsname",
                  "nodeType": "VariableDeclaration",
                  "scope": 440,
                  "src": "913:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 437,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "913:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "867:60:1"
            },
            "src": "856:72:1"
          },
          {
            "anonymous": false,
            "id": 444,
            "name": "NewOracle",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 443,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 442,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 444,
                  "src": "949:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 441,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "949:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "948:16:1"
            },
            "src": "933:32:1"
          },
          {
            "anonymous": false,
            "id": 448,
            "name": "NewPublicSuffixList",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 447,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 446,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "suffixes",
                  "nodeType": "VariableDeclaration",
                  "scope": 448,
                  "src": "996:16:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 445,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "996:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "995:18:1"
            },
            "src": "970:44:1"
          },
          {
            "body": {
              "id": 483,
              "nodeType": "Block",
              "src": "1093:177:1",
              "statements": [
                {
                  "expression": {
                    "id": 459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 457,
                      "name": "oracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 404,
                      "src": "1103:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$2273",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 458,
                      "name": "_dnssec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 450,
                      "src": "1112:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$2273",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "src": "1103:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$2273",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "id": 460,
                  "nodeType": "ExpressionStatement",
                  "src": "1103:16:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 464,
                            "name": "oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 404,
                            "src": "1152:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DNSSEC_$2273",
                              "typeString": "contract DNSSEC"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DNSSEC_$2273",
                              "typeString": "contract DNSSEC"
                            }
                          ],
                          "id": 463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1144:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 462,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1144:7:1",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1144:15:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 461,
                      "name": "NewOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 444,
                      "src": "1134:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:26:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 467,
                  "nodeType": "EmitStatement",
                  "src": "1129:31:1"
                },
                {
                  "expression": {
                    "id": 470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 468,
                      "name": "suffixes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 408,
                      "src": "1170:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                        "typeString": "contract PublicSuffixList"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 469,
                      "name": "_suffixes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 452,
                      "src": "1181:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                        "typeString": "contract PublicSuffixList"
                      }
                    },
                    "src": "1170:20:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                      "typeString": "contract PublicSuffixList"
                    }
                  },
                  "id": 471,
                  "nodeType": "ExpressionStatement",
                  "src": "1170:20:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 475,
                            "name": "suffixes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 408,
                            "src": "1233:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                              "typeString": "contract PublicSuffixList"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                              "typeString": "contract PublicSuffixList"
                            }
                          ],
                          "id": 474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1225:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 473,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1225:7:1",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1225:17:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 472,
                      "name": "NewPublicSuffixList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 448,
                      "src": "1205:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1205:38:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 478,
                  "nodeType": "EmitStatement",
                  "src": "1200:43:1"
                },
                {
                  "expression": {
                    "id": 481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 479,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 406,
                      "src": "1253:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3533",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 480,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 454,
                      "src": "1259:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$3533",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "1253:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3533",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 482,
                  "nodeType": "ExpressionStatement",
                  "src": "1253:10:1"
                }
              ]
            },
            "id": 484,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 450,
                  "mutability": "mutable",
                  "name": "_dnssec",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "1032:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DNSSEC_$2273",
                    "typeString": "contract DNSSEC"
                  },
                  "typeName": {
                    "id": 449,
                    "name": "DNSSEC",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2273,
                    "src": "1032:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$2273",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 452,
                  "mutability": "mutable",
                  "name": "_suffixes",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "1048:26:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                    "typeString": "contract PublicSuffixList"
                  },
                  "typeName": {
                    "id": 451,
                    "name": "PublicSuffixList",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 881,
                    "src": "1048:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                      "typeString": "contract PublicSuffixList"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 454,
                  "mutability": "mutable",
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 484,
                  "src": "1076:8:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$3533",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "id": 453,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3533,
                    "src": "1076:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$3533",
                      "typeString": "contract ENS"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1031:54:1"
            },
            "returnParameters": {
              "id": 456,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1093:0:1"
            },
            "scope": 814,
            "src": "1020:250:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 513,
              "nodeType": "Block",
              "src": "1405:143:1",
              "statements": [
                {
                  "assignments": [
                    488
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 488,
                      "mutability": "mutable",
                      "name": "root",
                      "nodeType": "VariableDeclaration",
                      "scope": 513,
                      "src": "1415:9:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Root_$4178",
                        "typeString": "contract Root"
                      },
                      "typeName": {
                        "id": 487,
                        "name": "Root",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 4178,
                        "src": "1415:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Root_$4178",
                          "typeString": "contract Root"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 498,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 494,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1450:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1442:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 492,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "1442:7:1",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1442:10:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 490,
                            "name": "ens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 406,
                            "src": "1432:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ENS_$3533",
                              "typeString": "contract ENS"
                            }
                          },
                          "id": 491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3502,
                          "src": "1432:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view external returns (address)"
                          }
                        },
                        "id": 496,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1432:21:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 489,
                      "name": "Root",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4178,
                      "src": "1427:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Root_$4178_$",
                        "typeString": "type(contract Root)"
                      }
                    },
                    "id": 497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1427:27:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Root_$4178",
                      "typeString": "contract Root"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1415:39:1"
                },
                {
                  "assignments": [
                    500
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 500,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 513,
                      "src": "1464:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 499,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1464:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 504,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 501,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 488,
                        "src": "1480:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Root_$4178",
                          "typeString": "contract Root"
                        }
                      },
                      "id": 502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4008,
                      "src": "1480:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                        "typeString": "function () view external returns (address)"
                      }
                    },
                    "id": 503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1480:12:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1464:28:1"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 509,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 506,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1510:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 507,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1510:10:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 508,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 500,
                          "src": "1524:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1510:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 505,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1502:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1502:28:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 511,
                  "nodeType": "ExpressionStatement",
                  "src": "1502:28:1"
                },
                {
                  "id": 512,
                  "nodeType": "PlaceholderStatement",
                  "src": "1540:1:1"
                }
              ]
            },
            "documentation": {
              "id": 485,
              "nodeType": "StructuredDocumentation",
              "src": "1276:105:1",
              "text": " @dev This contract's owner-only functions can be invoked by the owner of the ENS root."
            },
            "id": 514,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1405:0:1"
            },
            "src": "1386:162:1",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 532,
              "nodeType": "Block",
              "src": "1606:74:1",
              "statements": [
                {
                  "expression": {
                    "id": 523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 521,
                      "name": "oracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 404,
                      "src": "1616:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$2273",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 522,
                      "name": "_dnssec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 516,
                      "src": "1625:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$2273",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "src": "1616:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$2273",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "id": 524,
                  "nodeType": "ExpressionStatement",
                  "src": "1616:16:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 528,
                            "name": "oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 404,
                            "src": "1665:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DNSSEC_$2273",
                              "typeString": "contract DNSSEC"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DNSSEC_$2273",
                              "typeString": "contract DNSSEC"
                            }
                          ],
                          "id": 527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1657:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 526,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1657:7:1",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 529,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1657:15:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 525,
                      "name": "NewOracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 444,
                      "src": "1647:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1647:26:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 531,
                  "nodeType": "EmitStatement",
                  "src": "1642:31:1"
                }
              ]
            },
            "functionSelector": "7adbf973",
            "id": 533,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 519,
                "modifierName": {
                  "id": 518,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 514,
                  "src": "1596:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1596:9:1"
              }
            ],
            "name": "setOracle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 517,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 516,
                  "mutability": "mutable",
                  "name": "_dnssec",
                  "nodeType": "VariableDeclaration",
                  "scope": 533,
                  "src": "1573:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DNSSEC_$2273",
                    "typeString": "contract DNSSEC"
                  },
                  "typeName": {
                    "id": 515,
                    "name": "DNSSEC",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2273,
                    "src": "1573:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$2273",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1572:16:1"
            },
            "returnParameters": {
              "id": 520,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1606:0:1"
            },
            "scope": 814,
            "src": "1554:126:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 551,
              "nodeType": "Block",
              "src": "1760:90:1",
              "statements": [
                {
                  "expression": {
                    "id": 542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 540,
                      "name": "suffixes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 408,
                      "src": "1770:8:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                        "typeString": "contract PublicSuffixList"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 541,
                      "name": "_suffixes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 535,
                      "src": "1781:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                        "typeString": "contract PublicSuffixList"
                      }
                    },
                    "src": "1770:20:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                      "typeString": "contract PublicSuffixList"
                    }
                  },
                  "id": 543,
                  "nodeType": "ExpressionStatement",
                  "src": "1770:20:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 547,
                            "name": "suffixes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 408,
                            "src": "1833:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                              "typeString": "contract PublicSuffixList"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                              "typeString": "contract PublicSuffixList"
                            }
                          ],
                          "id": 546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1825:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 545,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1825:7:1",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1825:17:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 544,
                      "name": "NewPublicSuffixList",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 448,
                      "src": "1805:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1805:38:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 550,
                  "nodeType": "EmitStatement",
                  "src": "1800:43:1"
                }
              ]
            },
            "functionSelector": "1ecfc411",
            "id": 552,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 538,
                "modifierName": {
                  "id": 537,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 514,
                  "src": "1750:9:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1750:9:1"
              }
            ],
            "name": "setPublicSuffixList",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 535,
                  "mutability": "mutable",
                  "name": "_suffixes",
                  "nodeType": "VariableDeclaration",
                  "scope": 552,
                  "src": "1715:26:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                    "typeString": "contract PublicSuffixList"
                  },
                  "typeName": {
                    "id": 534,
                    "name": "PublicSuffixList",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 881,
                    "src": "1715:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                      "typeString": "contract PublicSuffixList"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1714:28:1"
            },
            "returnParameters": {
              "id": 539,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1760:0:1"
            },
            "scope": 814,
            "src": "1686:164:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 638,
              "nodeType": "Block",
              "src": "2403:716:1",
              "statements": [
                {
                  "assignments": [
                    561
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 561,
                      "mutability": "mutable",
                      "name": "labelLen",
                      "nodeType": "VariableDeclaration",
                      "scope": 638,
                      "src": "2444:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 560,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2444:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 566,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "30",
                        "id": 564,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2475:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "id": 562,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "2460:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "readUint8",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1764,
                      "src": "2460:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                      }
                    },
                    "id": 565,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2460:17:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2444:33:1"
                },
                {
                  "assignments": [
                    568
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 568,
                      "mutability": "mutable",
                      "name": "labelHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 638,
                      "src": "2487:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 567,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2487:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 574,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "31",
                        "id": 571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2519:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "id": 572,
                        "name": "labelLen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 561,
                        "src": "2522:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 569,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "2507:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1476,
                      "src": "2507:11:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2507:24:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2487:44:1"
                },
                {
                  "assignments": [
                    576
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 576,
                      "mutability": "mutable",
                      "name": "parentName",
                      "nodeType": "VariableDeclaration",
                      "scope": 638,
                      "src": "2600:23:1",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 575,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2600:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 589,
                  "initialValue": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 579,
                          "name": "labelLen",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 561,
                          "src": "2641:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2652:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "2641:12:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 587,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 582,
                              "name": "name",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 555,
                              "src": "2655:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 583,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2655:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 584,
                            "name": "labelLen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 561,
                            "src": "2669:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2655:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 586,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2680:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "2655:26:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 577,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "2626:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "substring",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1955,
                      "src": "2626:14:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                      }
                    },
                    "id": 588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2626:56:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2600:82:1"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 593,
                            "name": "parentName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 576,
                            "src": "2724:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "id": 591,
                            "name": "suffixes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 408,
                            "src": "2700:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                              "typeString": "contract PublicSuffixList"
                            }
                          },
                          "id": 592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isPublicSuffix",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 880,
                          "src": "2700:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes memory) view external returns (bool)"
                          }
                        },
                        "id": 594,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2700:35:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "506172656e74206e616d65206d7573742062652061207075626c696320737566666978",
                        "id": 595,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2737:37:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5df6cb05960cf5aa4f7482cb9ceb06b354899f3958a55d842cf18bd9cb0b227a",
                          "typeString": "literal_string \"Parent name must be a public suffix\""
                        },
                        "value": "Parent name must be a public suffix"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5df6cb05960cf5aa4f7482cb9ceb06b354899f3958a55d842cf18bd9cb0b227a",
                          "typeString": "literal_string \"Parent name must be a public suffix\""
                        }
                      ],
                      "id": 590,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2692:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2692:83:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 597,
                  "nodeType": "ExpressionStatement",
                  "src": "2692:83:1"
                },
                {
                  "assignments": [
                    599
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 599,
                      "mutability": "mutable",
                      "name": "rootNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 638,
                      "src": "2834:16:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 598,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2834:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 604,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 601,
                        "name": "parentName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 576,
                        "src": "2864:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "30",
                        "id": 602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2876:1:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 600,
                      "name": "enableNode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 813,
                      "src": "2853:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,uint256) returns (bytes32)"
                      }
                    },
                    "id": 603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2853:25:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2834:44:1"
                },
                {
                  "assignments": [
                    606
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 606,
                      "mutability": "mutable",
                      "name": "addr",
                      "nodeType": "VariableDeclaration",
                      "scope": 638,
                      "src": "2889:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 605,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2889:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 607,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2889:12:1"
                },
                {
                  "expression": {
                    "id": 616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 608,
                          "name": "addr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 606,
                          "src": "2912:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        null
                      ],
                      "id": 609,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2911:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$__$",
                        "typeString": "tuple(address,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 612,
                          "name": "oracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 404,
                          "src": "2953:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DNSSEC_$2273",
                            "typeString": "contract DNSSEC"
                          }
                        },
                        {
                          "id": 613,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 555,
                          "src": "2961:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 614,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 557,
                          "src": "2967:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DNSSEC_$2273",
                            "typeString": "contract DNSSEC"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "id": 610,
                          "name": "DNSClaimChecker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 390,
                          "src": "2921:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_DNSClaimChecker_$390_$",
                            "typeString": "type(library DNSClaimChecker)"
                          }
                        },
                        "id": 611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getOwnerAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 166,
                        "src": "2921:31:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_contract$_DNSSEC_$2273_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_address_$_t_bool_$",
                          "typeString": "function (contract DNSSEC,bytes memory,bytes memory) view returns (address,bool)"
                        }
                      },
                      "id": 615,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2921:52:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_bool_$",
                        "typeString": "tuple(address,bool)"
                      }
                    },
                    "src": "2911:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 617,
                  "nodeType": "ExpressionStatement",
                  "src": "2911:62:1"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 621,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 599,
                        "src": "3004:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 622,
                        "name": "labelHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 568,
                        "src": "3014:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 623,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 606,
                        "src": "3025:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 618,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 406,
                        "src": "2984:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3533",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 620,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setSubnodeOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3467,
                      "src": "2984:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32,bytes32,address) external returns (bytes32)"
                      }
                    },
                    "id": 624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2984:46:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 625,
                  "nodeType": "ExpressionStatement",
                  "src": "2984:46:1"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 630,
                                "name": "rootNode",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 599,
                                "src": "3078:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 631,
                                "name": "labelHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 568,
                                "src": "3088:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 628,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "3061:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 629,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "src": "3061:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 632,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3061:37:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 627,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "3051:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 633,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3051:48:1",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 634,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 606,
                        "src": "3101:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 635,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 555,
                        "src": "3107:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 626,
                      "name": "Claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 440,
                      "src": "3045:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,address,bytes memory)"
                      }
                    },
                    "id": 636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3045:67:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 637,
                  "nodeType": "EmitStatement",
                  "src": "3040:72:1"
                }
              ]
            },
            "documentation": {
              "id": 553,
              "nodeType": "StructuredDocumentation",
              "src": "1856:481:1",
              "text": " @dev Claims a name by proving ownership of its DNS equivalent.\n @param name The name to claim, in DNS wire format.\n @param proof A DNS RRSet proving ownership of the name. Must be verified\n        in the DNSSEC oracle before calling. This RRSET must contain a TXT\n        record for '_ens.' + name, with the value 'a=0x...'. Ownership of\n        the name will be transferred to the address specified in the TXT\n        record."
            },
            "functionSelector": "be27b22c",
            "id": 639,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 555,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 639,
                  "src": "2357:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2357:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 557,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 639,
                  "src": "2376:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 556,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2376:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2356:39:1"
            },
            "returnParameters": {
              "id": 559,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2403:0:1"
            },
            "scope": 814,
            "src": "2342:777:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 662,
              "nodeType": "Block",
              "src": "3607:86:1",
              "statements": [
                {
                  "expression": {
                    "id": 655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 649,
                      "name": "proof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 646,
                      "src": "3617:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 652,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 644,
                          "src": "3645:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 653,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 646,
                          "src": "3652:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "id": 650,
                          "name": "oracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 404,
                          "src": "3625:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DNSSEC_$2273",
                            "typeString": "contract DNSSEC"
                          }
                        },
                        "id": 651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "submitRRSets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2226,
                        "src": "3625:19:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory) external returns (bytes memory)"
                        }
                      },
                      "id": 654,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3625:33:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "3617:41:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 656,
                  "nodeType": "ExpressionStatement",
                  "src": "3617:41:1"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 658,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 642,
                        "src": "3674:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 659,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 646,
                        "src": "3680:5:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 657,
                      "name": "claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 639,
                      "src": "3668:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,bytes memory)"
                      }
                    },
                    "id": 660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3668:18:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 661,
                  "nodeType": "ExpressionStatement",
                  "src": "3668:18:1"
                }
              ]
            },
            "documentation": {
              "id": 640,
              "nodeType": "StructuredDocumentation",
              "src": "3125:388:1",
              "text": " @dev Submits proofs to the DNSSEC oracle, then claims a name using those proofs.\n @param name The name to claim, in DNS wire format.\n @param input The data to be passed to the Oracle's `submitProofs` function. The last\n        proof must be the TXT record required by the registrar.\n @param proof The proof record for the first element in input."
            },
            "functionSelector": "d94585bd",
            "id": 663,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proveAndClaim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 642,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 663,
                  "src": "3541:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 641,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3541:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 644,
                  "mutability": "mutable",
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 663,
                  "src": "3560:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 643,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3560:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 646,
                  "mutability": "mutable",
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 663,
                  "src": "3580:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 645,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3580:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3540:59:1"
            },
            "returnParameters": {
              "id": 648,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3607:0:1"
            },
            "scope": 814,
            "src": "3518:175:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 678,
              "nodeType": "Block",
              "src": "3775:105:1",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 672,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 670,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 665,
                        "src": "3792:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 671,
                        "name": "INTERFACE_META_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 416,
                        "src": "3807:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "3792:32:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 673,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 665,
                        "src": "3843:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 674,
                        "name": "DNSSEC_CLAIM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 432,
                        "src": "3858:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "3843:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3792:81:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 669,
                  "id": 677,
                  "nodeType": "Return",
                  "src": "3785:88:1"
                }
              ]
            },
            "functionSelector": "01ffc9a7",
            "id": 679,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 666,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 665,
                  "mutability": "mutable",
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 679,
                  "src": "3726:18:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 664,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "3726:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3725:20:1"
            },
            "returnParameters": {
              "id": 669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 668,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 679,
                  "src": "3769:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 667,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3769:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3768:6:1"
            },
            "scope": 814,
            "src": "3699:181:1",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 812,
              "nodeType": "Block",
              "src": "3971:788:1",
              "statements": [
                {
                  "assignments": [
                    689
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 689,
                      "mutability": "mutable",
                      "name": "len",
                      "nodeType": "VariableDeclaration",
                      "scope": 812,
                      "src": "3981:8:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 688,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3981:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 694,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 692,
                        "name": "offset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 683,
                        "src": "4009:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 690,
                        "name": "domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 681,
                        "src": "3992:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 691,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "readUint8",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1764,
                      "src": "3992:16:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_uint8_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256) pure returns (uint8)"
                      }
                    },
                    "id": 693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3992:24:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3981:35:1"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 695,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 689,
                      "src": "4029:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4036:1:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4029:8:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 704,
                  "nodeType": "IfStatement",
                  "src": "4026:55:1",
                  "trueBody": {
                    "id": 703,
                    "nodeType": "Block",
                    "src": "4039:42:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 700,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4068:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4060:7:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": {
                              "id": 698,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "4060:7:1",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 701,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4060:10:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 687,
                        "id": 702,
                        "nodeType": "Return",
                        "src": "4053:17:1"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    706
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 706,
                      "mutability": "mutable",
                      "name": "parentNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 812,
                      "src": "4091:18:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 705,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4091:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 715,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 708,
                        "name": "domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 681,
                        "src": "4123:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 709,
                            "name": "offset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 683,
                            "src": "4131:6:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 710,
                            "name": "len",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 689,
                            "src": "4140:3:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4131:12:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4146:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "4131:16:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 707,
                      "name": "enableNode",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 813,
                      "src": "4112:10:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory,uint256) returns (bytes32)"
                      }
                    },
                    "id": 714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4112:36:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4091:57:1"
                },
                {
                  "assignments": [
                    717
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 717,
                      "mutability": "mutable",
                      "name": "label",
                      "nodeType": "VariableDeclaration",
                      "scope": 812,
                      "src": "4158:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 716,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "4158:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 725,
                  "initialValue": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 722,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 720,
                          "name": "offset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 683,
                          "src": "4188:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4197:1:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "4188:10:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 723,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 689,
                        "src": "4200:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 718,
                        "name": "domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 681,
                        "src": "4174:6:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 719,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "keccak",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1476,
                      "src": "4174:13:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                      }
                    },
                    "id": 724,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4174:30:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4158:46:1"
                },
                {
                  "expression": {
                    "id": 734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 726,
                      "name": "node",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 686,
                      "src": "4214:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 730,
                              "name": "parentNode",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 706,
                              "src": "4248:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 731,
                              "name": "label",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 717,
                              "src": "4260:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 728,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "4231:3:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 729,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "4231:16:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4231:35:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 727,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "4221:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 733,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4221:46:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "4214:53:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 735,
                  "nodeType": "ExpressionStatement",
                  "src": "4214:53:1"
                },
                {
                  "assignments": [
                    737
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 737,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 812,
                      "src": "4277:13:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 736,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4277:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 742,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 740,
                        "name": "node",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 686,
                        "src": "4303:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 738,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 406,
                        "src": "4293:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$3533",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "owner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3502,
                      "src": "4293:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4293:15:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4277:31:1"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 756,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 744,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 737,
                            "src": "4326:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 747,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4343:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4335:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 745,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4335:7:1",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 748,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4335:10:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4326:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 750,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 737,
                            "src": "4349:5:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 753,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "4366:4:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                  "typeString": "contract DNSRegistrar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                  "typeString": "contract DNSRegistrar"
                                }
                              ],
                              "id": 752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4358:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 751,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4358:7:1",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4358:13:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4349:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4326:45:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6d656f6e6520656c7365",
                        "id": 757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4373:44:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_63425cf3a05c76cf1155c52bcdbd99eb1081a9ada1a588d0e70852574c220981",
                          "typeString": "literal_string \"Cannot enable a name owned by someone else\""
                        },
                        "value": "Cannot enable a name owned by someone else"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_63425cf3a05c76cf1155c52bcdbd99eb1081a9ada1a588d0e70852574c220981",
                          "typeString": "literal_string \"Cannot enable a name owned by someone else\""
                        }
                      ],
                      "id": 743,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4318:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4318:100:1",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 759,
                  "nodeType": "ExpressionStatement",
                  "src": "4318:100:1"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 760,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 737,
                      "src": "4431:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 763,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "4448:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                            "typeString": "contract DNSRegistrar"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                            "typeString": "contract DNSRegistrar"
                          }
                        ],
                        "id": 762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4440:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 761,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4440:7:1",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4440:13:1",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4431:22:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 809,
                  "nodeType": "IfStatement",
                  "src": "4428:304:1",
                  "trueBody": {
                    "id": 808,
                    "nodeType": "Block",
                    "src": "4455:277:1",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 766,
                            "name": "parentNode",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 706,
                            "src": "4472:10:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 769,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4494:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4486:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 767,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "4486:7:1",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4486:10:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4472:24:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 806,
                          "nodeType": "Block",
                          "src": "4636:86:1",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 798,
                                    "name": "parentNode",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 706,
                                    "src": "4674:10:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 799,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 717,
                                    "src": "4686:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 802,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -28,
                                        "src": "4701:4:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                          "typeString": "contract DNSRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                          "typeString": "contract DNSRegistrar"
                                        }
                                      ],
                                      "id": 801,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "4693:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 800,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4693:7:1",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 803,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4693:13:1",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "id": 795,
                                    "name": "ens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 406,
                                    "src": "4654:3:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ENS_$3533",
                                      "typeString": "contract ENS"
                                    }
                                  },
                                  "id": 797,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3467,
                                  "src": "4654:19:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes32,bytes32,address) external returns (bytes32)"
                                  }
                                },
                                "id": 804,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4654:53:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 805,
                              "nodeType": "ExpressionStatement",
                              "src": "4654:53:1"
                            }
                          ]
                        },
                        "id": 807,
                        "nodeType": "IfStatement",
                        "src": "4469:253:1",
                        "trueBody": {
                          "id": 794,
                          "nodeType": "Block",
                          "src": "4498:132:1",
                          "statements": [
                            {
                              "assignments": [
                                773
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 773,
                                  "mutability": "mutable",
                                  "name": "root",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 794,
                                  "src": "4516:9:1",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Root_$4178",
                                    "typeString": "contract Root"
                                  },
                                  "typeName": {
                                    "id": 772,
                                    "name": "Root",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 4178,
                                    "src": "4516:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Root_$4178",
                                      "typeString": "contract Root"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 783,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "hexValue": "30",
                                            "id": 779,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "4551:1:1",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            }
                                          ],
                                          "id": 778,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "4543:7:1",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bytes32_$",
                                            "typeString": "type(bytes32)"
                                          },
                                          "typeName": {
                                            "id": 777,
                                            "name": "bytes32",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "4543:7:1",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 780,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4543:10:1",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "expression": {
                                        "id": 775,
                                        "name": "ens",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 406,
                                        "src": "4533:3:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_ENS_$3533",
                                          "typeString": "contract ENS"
                                        }
                                      },
                                      "id": 776,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "owner",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3502,
                                      "src": "4533:9:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                                        "typeString": "function (bytes32) view external returns (address)"
                                      }
                                    },
                                    "id": 781,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4533:21:1",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 774,
                                  "name": "Root",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4178,
                                  "src": "4528:4:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Root_$4178_$",
                                    "typeString": "type(contract Root)"
                                  }
                                },
                                "id": 782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4528:27:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Root_$4178",
                                  "typeString": "contract Root"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "4516:39:1"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 787,
                                    "name": "label",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 717,
                                    "src": "4594:5:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 790,
                                        "name": "this",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -28,
                                        "src": "4609:4:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                          "typeString": "contract DNSRegistrar"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                          "typeString": "contract DNSRegistrar"
                                        }
                                      ],
                                      "id": 789,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "4601:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 788,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4601:7:1",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 791,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4601:13:1",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "id": 784,
                                    "name": "root",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 773,
                                    "src": "4573:4:1",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Root_$4178",
                                      "typeString": "contract Root"
                                    }
                                  },
                                  "id": 786,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "setSubnodeOwner",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4132,
                                  "src": "4573:20:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,address) external"
                                  }
                                },
                                "id": 792,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4573:42:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 793,
                              "nodeType": "ExpressionStatement",
                              "src": "4573:42:1"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 810,
                    "name": "node",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 686,
                    "src": "4748:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 687,
                  "id": 811,
                  "nodeType": "Return",
                  "src": "4741:11:1"
                }
              ]
            },
            "id": 813,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "enableNode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 681,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 813,
                  "src": "3906:19:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 680,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3906:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 683,
                  "mutability": "mutable",
                  "name": "offset",
                  "nodeType": "VariableDeclaration",
                  "scope": 813,
                  "src": "3927:11:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 682,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3927:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3905:34:1"
            },
            "returnParameters": {
              "id": 687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 686,
                  "mutability": "mutable",
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 813,
                  "src": "3957:12:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 685,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3957:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3956:14:1"
            },
            "scope": 814,
            "src": "3886:873:1",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 815,
        "src": "424:4337:1"
      }
    ],
    "src": "0:4762:1"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSRegistrar.sol",
      "exportedSymbols": {
        "Buffer": [
          1452
        ],
        "BytesUtils": [
          2183
        ],
        "Controllable": [
          4004
        ],
        "DNSClaimChecker": [
          390
        ],
        "DNSRegistrar": [
          814
        ],
        "DNSSEC": [
          2273
        ],
        "ENS": [
          3533
        ],
        "ENSRegistry": [
          3956
        ],
        "Ownable": [
          4064
        ],
        "PublicSuffixList": [
          881
        ],
        "RRUtils": [
          3396
        ],
        "Root": [
          4178
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".0"
          ]
        },
        "id": 392,
        "name": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "attributes": {
          "SourceUnit": 2184,
          "absolutePath": "@ensdomains/dnssec-oracle/contracts/BytesUtils.sol",
          "file": "@ensdomains/dnssec-oracle/contracts/BytesUtils.sol",
          "scope": 815,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 393,
        "name": "ImportDirective",
        "src": "25:60:1"
      },
      {
        "attributes": {
          "SourceUnit": 2274,
          "absolutePath": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
          "file": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
          "scope": 815,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 394,
        "name": "ImportDirective",
        "src": "86:56:1"
      },
      {
        "attributes": {
          "SourceUnit": 3957,
          "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
          "file": "@ensdomains/ens/contracts/ENSRegistry.sol",
          "scope": 815,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 395,
        "name": "ImportDirective",
        "src": "143:51:1"
      },
      {
        "attributes": {
          "SourceUnit": 4179,
          "absolutePath": "@ensdomains/root/contracts/Root.sol",
          "file": "@ensdomains/root/contracts/Root.sol",
          "scope": 815,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 396,
        "name": "ImportDirective",
        "src": "195:45:1"
      },
      {
        "attributes": {
          "SourceUnit": 391,
          "absolutePath": "/home/arachnid/Dropbox/projects/dnsregistrar/contracts/DNSClaimChecker.sol",
          "file": "./DNSClaimChecker.sol",
          "scope": 815,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 397,
        "name": "ImportDirective",
        "src": "241:31:1"
      },
      {
        "attributes": {
          "SourceUnit": 882,
          "absolutePath": "/home/arachnid/Dropbox/projects/dnsregistrar/contracts/PublicSuffixList.sol",
          "file": "./PublicSuffixList.sol",
          "scope": 815,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 398,
        "name": "ImportDirective",
        "src": "273:32:1"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            814
          ],
          "name": "DNSRegistrar",
          "scope": 815
        },
        "children": [
          {
            "attributes": {
              "text": " @dev An ENS registrar that allows the owner of a DNS name to claim the\n      corresponding name in ENS."
            },
            "id": 399,
            "name": "StructuredDocumentation",
            "src": "307:116:1"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "BytesUtils",
                  "referencedDeclaration": 2183,
                  "type": "library BytesUtils"
                },
                "id": 400,
                "name": "UserDefinedTypeName",
                "src": "458:10:1"
              },
              {
                "attributes": {
                  "name": "bytes",
                  "type": "bytes"
                },
                "id": 401,
                "name": "ElementaryTypeName",
                "src": "473:5:1"
              }
            ],
            "id": 402,
            "name": "UsingForDirective",
            "src": "452:27:1"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "7dc0d1d0",
              "mutability": "mutable",
              "name": "oracle",
              "scope": 814,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract DNSSEC",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "DNSSEC",
                  "referencedDeclaration": 2273,
                  "type": "contract DNSSEC"
                },
                "id": 403,
                "name": "UserDefinedTypeName",
                "src": "485:6:1"
              }
            ],
            "id": 404,
            "name": "VariableDeclaration",
            "src": "485:20:1"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "3f15457f",
              "mutability": "mutable",
              "name": "ens",
              "scope": 814,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract ENS",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "ENS",
                  "referencedDeclaration": 3533,
                  "type": "contract ENS"
                },
                "id": 405,
                "name": "UserDefinedTypeName",
                "src": "511:3:1"
              }
            ],
            "id": 406,
            "name": "VariableDeclaration",
            "src": "511:14:1"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "30349ebe",
              "mutability": "mutable",
              "name": "suffixes",
              "scope": 814,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract PublicSuffixList",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "PublicSuffixList",
                  "referencedDeclaration": 881,
                  "type": "contract PublicSuffixList"
                },
                "id": 407,
                "name": "UserDefinedTypeName",
                "src": "531:16:1"
              }
            ],
            "id": 408,
            "name": "VariableDeclaration",
            "src": "531:32:1"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "INTERFACE_META_ID",
              "scope": 814,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 409,
                "name": "ElementaryTypeName",
                "src": "570:6:1"
              },
              {
                "attributes": {
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "tryCall": false,
                  "type": "bytes4",
                  "type_conversion": true
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "type": "type(bytes4)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4"
                        },
                        "id": 410,
                        "name": "ElementaryTypeName",
                        "src": "614:6:1"
                      }
                    ],
                    "id": 411,
                    "name": "ElementaryTypeNameExpression",
                    "src": "614:6:1"
                  },
                  {
                    "attributes": {
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "tryCall": false,
                      "type": "bytes32",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e2",
                              "typeString": "literal_string \"supportsInterface(bytes4)\""
                            }
                          ],
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": -8,
                          "type": "function (bytes memory) pure returns (bytes32)",
                          "value": "keccak256"
                        },
                        "id": 412,
                        "name": "Identifier",
                        "src": "621:9:1"
                      },
                      {
                        "attributes": {
                          "hexvalue": "737570706f727473496e746572666163652862797465733429",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "token": "string",
                          "type": "literal_string \"supportsInterface(bytes4)\"",
                          "value": "supportsInterface(bytes4)"
                        },
                        "id": 413,
                        "name": "Literal",
                        "src": "631:27:1"
                      }
                    ],
                    "id": 414,
                    "name": "FunctionCall",
                    "src": "621:38:1"
                  }
                ],
                "id": 415,
                "name": "FunctionCall",
                "src": "614:46:1"
              }
            ],
            "id": 416,
            "name": "VariableDeclaration",
            "src": "570:90:1"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "DNSSEC_CLAIM_ID",
              "scope": 814,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 417,
                "name": "ElementaryTypeName",
                "src": "666:6:1"
              },
              {
                "attributes": {
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "tryCall": false,
                  "type": "bytes4",
                  "type_conversion": true
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "type": "type(bytes4)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4"
                        },
                        "id": 418,
                        "name": "ElementaryTypeName",
                        "src": "708:6:1"
                      }
                    ],
                    "id": 419,
                    "name": "ElementaryTypeNameExpression",
                    "src": "708:6:1"
                  },
                  {
                    "attributes": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "^",
                      "type": "bytes32"
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "operator": "^",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_be27b22c9acdad36ca1f0f94c9fd0d70d9f9852f6e2a5bfda557066792871970",
                                      "typeString": "literal_string \"claim(bytes,bytes)\""
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -8,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 420,
                                "name": "Identifier",
                                "src": "724:9:1"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "636c61696d2862797465732c627974657329",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "string",
                                  "type": "literal_string \"claim(bytes,bytes)\"",
                                  "value": "claim(bytes,bytes)"
                                },
                                "id": 421,
                                "name": "Literal",
                                "src": "734:20:1"
                              }
                            ],
                            "id": 422,
                            "name": "FunctionCall",
                            "src": "724:31:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_d94585bdbcfe8f813f622f992acac91edb949402317ea853110ee88dff862633",
                                      "typeString": "literal_string \"proveAndClaim(bytes,bytes,bytes)\""
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -8,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 423,
                                "name": "Identifier",
                                "src": "766:9:1"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "70726f7665416e64436c61696d2862797465732c62797465732c627974657329",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "string",
                                  "type": "literal_string \"proveAndClaim(bytes,bytes,bytes)\"",
                                  "value": "proveAndClaim(bytes,bytes,bytes)"
                                },
                                "id": 424,
                                "name": "Literal",
                                "src": "776:34:1"
                              }
                            ],
                            "id": 425,
                            "name": "FunctionCall",
                            "src": "766:45:1"
                          }
                        ],
                        "id": 426,
                        "name": "BinaryOperation",
                        "src": "724:87:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db580555",
                                  "typeString": "literal_string \"oracle()\""
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": -8,
                              "type": "function (bytes memory) pure returns (bytes32)",
                              "value": "keccak256"
                            },
                            "id": 427,
                            "name": "Identifier",
                            "src": "822:9:1"
                          },
                          {
                            "attributes": {
                              "hexvalue": "6f7261636c652829",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"oracle()\"",
                              "value": "oracle()"
                            },
                            "id": 428,
                            "name": "Literal",
                            "src": "832:10:1"
                          }
                        ],
                        "id": 429,
                        "name": "FunctionCall",
                        "src": "822:21:1"
                      }
                    ],
                    "id": 430,
                    "name": "BinaryOperation",
                    "src": "724:119:1"
                  }
                ],
                "id": 431,
                "name": "FunctionCall",
                "src": "708:141:1"
              }
            ],
            "id": 432,
            "name": "VariableDeclaration",
            "src": "666:183:1"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "Claim"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 440,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 433,
                        "name": "ElementaryTypeName",
                        "src": "868:7:1"
                      }
                    ],
                    "id": 434,
                    "name": "VariableDeclaration",
                    "src": "868:20:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 440,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 435,
                        "name": "ElementaryTypeName",
                        "src": "890:7:1"
                      }
                    ],
                    "id": 436,
                    "name": "VariableDeclaration",
                    "src": "890:21:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "dnsname",
                      "scope": 440,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 437,
                        "name": "ElementaryTypeName",
                        "src": "913:5:1"
                      }
                    ],
                    "id": 438,
                    "name": "VariableDeclaration",
                    "src": "913:13:1"
                  }
                ],
                "id": 439,
                "name": "ParameterList",
                "src": "867:60:1"
              }
            ],
            "id": 440,
            "name": "EventDefinition",
            "src": "856:72:1"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "NewOracle"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "oracle",
                      "scope": 444,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 441,
                        "name": "ElementaryTypeName",
                        "src": "949:7:1"
                      }
                    ],
                    "id": 442,
                    "name": "VariableDeclaration",
                    "src": "949:14:1"
                  }
                ],
                "id": 443,
                "name": "ParameterList",
                "src": "948:16:1"
              }
            ],
            "id": 444,
            "name": "EventDefinition",
            "src": "933:32:1"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "NewPublicSuffixList"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "suffixes",
                      "scope": 448,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 445,
                        "name": "ElementaryTypeName",
                        "src": "996:7:1"
                      }
                    ],
                    "id": 446,
                    "name": "VariableDeclaration",
                    "src": "996:16:1"
                  }
                ],
                "id": 447,
                "name": "ParameterList",
                "src": "995:18:1"
              }
            ],
            "id": 448,
            "name": "EventDefinition",
            "src": "970:44:1"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 814,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_dnssec",
                      "scope": 484,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract DNSSEC",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "DNSSEC",
                          "referencedDeclaration": 2273,
                          "type": "contract DNSSEC"
                        },
                        "id": 449,
                        "name": "UserDefinedTypeName",
                        "src": "1032:6:1"
                      }
                    ],
                    "id": 450,
                    "name": "VariableDeclaration",
                    "src": "1032:14:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_suffixes",
                      "scope": 484,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract PublicSuffixList",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "PublicSuffixList",
                          "referencedDeclaration": 881,
                          "type": "contract PublicSuffixList"
                        },
                        "id": 451,
                        "name": "UserDefinedTypeName",
                        "src": "1048:16:1"
                      }
                    ],
                    "id": 452,
                    "name": "VariableDeclaration",
                    "src": "1048:26:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_ens",
                      "scope": 484,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ENS",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "ENS",
                          "referencedDeclaration": 3533,
                          "type": "contract ENS"
                        },
                        "id": 453,
                        "name": "UserDefinedTypeName",
                        "src": "1076:3:1"
                      }
                    ],
                    "id": 454,
                    "name": "VariableDeclaration",
                    "src": "1076:8:1"
                  }
                ],
                "id": 455,
                "name": "ParameterList",
                "src": "1031:54:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 456,
                "name": "ParameterList",
                "src": "1093:0:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract DNSSEC"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 404,
                              "type": "contract DNSSEC",
                              "value": "oracle"
                            },
                            "id": 457,
                            "name": "Identifier",
                            "src": "1103:6:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 450,
                              "type": "contract DNSSEC",
                              "value": "_dnssec"
                            },
                            "id": 458,
                            "name": "Identifier",
                            "src": "1112:7:1"
                          }
                        ],
                        "id": 459,
                        "name": "Assignment",
                        "src": "1103:16:1"
                      }
                    ],
                    "id": 460,
                    "name": "ExpressionStatement",
                    "src": "1103:16:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 444,
                              "type": "function (address)",
                              "value": "NewOracle"
                            },
                            "id": 461,
                            "name": "Identifier",
                            "src": "1134:9:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DNSSEC_$2273",
                                      "typeString": "contract DNSSEC"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 462,
                                    "name": "ElementaryTypeName",
                                    "src": "1144:7:1"
                                  }
                                ],
                                "id": 463,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1144:7:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 404,
                                  "type": "contract DNSSEC",
                                  "value": "oracle"
                                },
                                "id": 464,
                                "name": "Identifier",
                                "src": "1152:6:1"
                              }
                            ],
                            "id": 465,
                            "name": "FunctionCall",
                            "src": "1144:15:1"
                          }
                        ],
                        "id": 466,
                        "name": "FunctionCall",
                        "src": "1134:26:1"
                      }
                    ],
                    "id": 467,
                    "name": "EmitStatement",
                    "src": "1129:31:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract PublicSuffixList"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 408,
                              "type": "contract PublicSuffixList",
                              "value": "suffixes"
                            },
                            "id": 468,
                            "name": "Identifier",
                            "src": "1170:8:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 452,
                              "type": "contract PublicSuffixList",
                              "value": "_suffixes"
                            },
                            "id": 469,
                            "name": "Identifier",
                            "src": "1181:9:1"
                          }
                        ],
                        "id": 470,
                        "name": "Assignment",
                        "src": "1170:20:1"
                      }
                    ],
                    "id": 471,
                    "name": "ExpressionStatement",
                    "src": "1170:20:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 448,
                              "type": "function (address)",
                              "value": "NewPublicSuffixList"
                            },
                            "id": 472,
                            "name": "Identifier",
                            "src": "1205:19:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                                      "typeString": "contract PublicSuffixList"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 473,
                                    "name": "ElementaryTypeName",
                                    "src": "1225:7:1"
                                  }
                                ],
                                "id": 474,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1225:7:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 408,
                                  "type": "contract PublicSuffixList",
                                  "value": "suffixes"
                                },
                                "id": 475,
                                "name": "Identifier",
                                "src": "1233:8:1"
                              }
                            ],
                            "id": 476,
                            "name": "FunctionCall",
                            "src": "1225:17:1"
                          }
                        ],
                        "id": 477,
                        "name": "FunctionCall",
                        "src": "1205:38:1"
                      }
                    ],
                    "id": 478,
                    "name": "EmitStatement",
                    "src": "1200:43:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ENS"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 406,
                              "type": "contract ENS",
                              "value": "ens"
                            },
                            "id": 479,
                            "name": "Identifier",
                            "src": "1253:3:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 454,
                              "type": "contract ENS",
                              "value": "_ens"
                            },
                            "id": 480,
                            "name": "Identifier",
                            "src": "1259:4:1"
                          }
                        ],
                        "id": 481,
                        "name": "Assignment",
                        "src": "1253:10:1"
                      }
                    ],
                    "id": 482,
                    "name": "ExpressionStatement",
                    "src": "1253:10:1"
                  }
                ],
                "id": 483,
                "name": "Block",
                "src": "1093:177:1"
              }
            ],
            "id": 484,
            "name": "FunctionDefinition",
            "src": "1020:250:1"
          },
          {
            "attributes": {
              "name": "onlyOwner",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev This contract's owner-only functions can be invoked by the owner of the ENS root."
                },
                "id": 485,
                "name": "StructuredDocumentation",
                "src": "1276:105:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 486,
                "name": "ParameterList",
                "src": "1405:0:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        488
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "root",
                          "scope": 513,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract Root",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "Root",
                              "referencedDeclaration": 4178,
                              "type": "contract Root"
                            },
                            "id": 487,
                            "name": "UserDefinedTypeName",
                            "src": "1415:4:1"
                          }
                        ],
                        "id": 488,
                        "name": "VariableDeclaration",
                        "src": "1415:9:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract Root",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4178,
                              "type": "type(contract Root)",
                              "value": "Root"
                            },
                            "id": 489,
                            "name": "Identifier",
                            "src": "1427:4:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "owner",
                                  "referencedDeclaration": 3502,
                                  "type": "function (bytes32) view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 406,
                                      "type": "contract ENS",
                                      "value": "ens"
                                    },
                                    "id": 490,
                                    "name": "Identifier",
                                    "src": "1432:3:1"
                                  }
                                ],
                                "id": 491,
                                "name": "MemberAccess",
                                "src": "1432:9:1"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes32",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes32)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "bytes32"
                                        },
                                        "id": 492,
                                        "name": "ElementaryTypeName",
                                        "src": "1442:7:1"
                                      }
                                    ],
                                    "id": 493,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "1442:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 494,
                                    "name": "Literal",
                                    "src": "1450:1:1"
                                  }
                                ],
                                "id": 495,
                                "name": "FunctionCall",
                                "src": "1442:10:1"
                              }
                            ],
                            "id": 496,
                            "name": "FunctionCall",
                            "src": "1432:21:1"
                          }
                        ],
                        "id": 497,
                        "name": "FunctionCall",
                        "src": "1427:27:1"
                      }
                    ],
                    "id": 498,
                    "name": "VariableDeclarationStatement",
                    "src": "1415:39:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        500
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "owner",
                          "scope": 513,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 499,
                            "name": "ElementaryTypeName",
                            "src": "1464:7:1"
                          }
                        ],
                        "id": 500,
                        "name": "VariableDeclaration",
                        "src": "1464:13:1"
                      },
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "owner",
                              "referencedDeclaration": 4008,
                              "type": "function () view external returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 488,
                                  "type": "contract Root",
                                  "value": "root"
                                },
                                "id": 501,
                                "name": "Identifier",
                                "src": "1480:4:1"
                              }
                            ],
                            "id": 502,
                            "name": "MemberAccess",
                            "src": "1480:10:1"
                          }
                        ],
                        "id": 503,
                        "name": "FunctionCall",
                        "src": "1480:12:1"
                      }
                    ],
                    "id": 504,
                    "name": "VariableDeclarationStatement",
                    "src": "1464:28:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 505,
                            "name": "Identifier",
                            "src": "1502:7:1"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": -15,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 506,
                                    "name": "Identifier",
                                    "src": "1510:3:1"
                                  }
                                ],
                                "id": 507,
                                "name": "MemberAccess",
                                "src": "1510:10:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 500,
                                  "type": "address",
                                  "value": "owner"
                                },
                                "id": 508,
                                "name": "Identifier",
                                "src": "1524:5:1"
                              }
                            ],
                            "id": 509,
                            "name": "BinaryOperation",
                            "src": "1510:19:1"
                          }
                        ],
                        "id": 510,
                        "name": "FunctionCall",
                        "src": "1502:28:1"
                      }
                    ],
                    "id": 511,
                    "name": "ExpressionStatement",
                    "src": "1502:28:1"
                  },
                  {
                    "id": 512,
                    "name": "PlaceholderStatement",
                    "src": "1540:1:1"
                  }
                ],
                "id": 513,
                "name": "Block",
                "src": "1405:143:1"
              }
            ],
            "id": 514,
            "name": "ModifierDefinition",
            "src": "1386:162:1"
          },
          {
            "attributes": {
              "functionSelector": "7adbf973",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setOracle",
              "scope": 814,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_dnssec",
                      "scope": 533,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract DNSSEC",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "DNSSEC",
                          "referencedDeclaration": 2273,
                          "type": "contract DNSSEC"
                        },
                        "id": 515,
                        "name": "UserDefinedTypeName",
                        "src": "1573:6:1"
                      }
                    ],
                    "id": 516,
                    "name": "VariableDeclaration",
                    "src": "1573:14:1"
                  }
                ],
                "id": 517,
                "name": "ParameterList",
                "src": "1572:16:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 520,
                "name": "ParameterList",
                "src": "1606:0:1"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 514,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 518,
                    "name": "Identifier",
                    "src": "1596:9:1"
                  }
                ],
                "id": 519,
                "name": "ModifierInvocation",
                "src": "1596:9:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract DNSSEC"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 404,
                              "type": "contract DNSSEC",
                              "value": "oracle"
                            },
                            "id": 521,
                            "name": "Identifier",
                            "src": "1616:6:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 516,
                              "type": "contract DNSSEC",
                              "value": "_dnssec"
                            },
                            "id": 522,
                            "name": "Identifier",
                            "src": "1625:7:1"
                          }
                        ],
                        "id": 523,
                        "name": "Assignment",
                        "src": "1616:16:1"
                      }
                    ],
                    "id": 524,
                    "name": "ExpressionStatement",
                    "src": "1616:16:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 444,
                              "type": "function (address)",
                              "value": "NewOracle"
                            },
                            "id": 525,
                            "name": "Identifier",
                            "src": "1647:9:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DNSSEC_$2273",
                                      "typeString": "contract DNSSEC"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 526,
                                    "name": "ElementaryTypeName",
                                    "src": "1657:7:1"
                                  }
                                ],
                                "id": 527,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1657:7:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 404,
                                  "type": "contract DNSSEC",
                                  "value": "oracle"
                                },
                                "id": 528,
                                "name": "Identifier",
                                "src": "1665:6:1"
                              }
                            ],
                            "id": 529,
                            "name": "FunctionCall",
                            "src": "1657:15:1"
                          }
                        ],
                        "id": 530,
                        "name": "FunctionCall",
                        "src": "1647:26:1"
                      }
                    ],
                    "id": 531,
                    "name": "EmitStatement",
                    "src": "1642:31:1"
                  }
                ],
                "id": 532,
                "name": "Block",
                "src": "1606:74:1"
              }
            ],
            "id": 533,
            "name": "FunctionDefinition",
            "src": "1554:126:1"
          },
          {
            "attributes": {
              "functionSelector": "1ecfc411",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "setPublicSuffixList",
              "scope": 814,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_suffixes",
                      "scope": 552,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract PublicSuffixList",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "PublicSuffixList",
                          "referencedDeclaration": 881,
                          "type": "contract PublicSuffixList"
                        },
                        "id": 534,
                        "name": "UserDefinedTypeName",
                        "src": "1715:16:1"
                      }
                    ],
                    "id": 535,
                    "name": "VariableDeclaration",
                    "src": "1715:26:1"
                  }
                ],
                "id": 536,
                "name": "ParameterList",
                "src": "1714:28:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 539,
                "name": "ParameterList",
                "src": "1760:0:1"
              },
              {
                "attributes": {},
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 514,
                      "type": "modifier ()",
                      "value": "onlyOwner"
                    },
                    "id": 537,
                    "name": "Identifier",
                    "src": "1750:9:1"
                  }
                ],
                "id": 538,
                "name": "ModifierInvocation",
                "src": "1750:9:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract PublicSuffixList"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 408,
                              "type": "contract PublicSuffixList",
                              "value": "suffixes"
                            },
                            "id": 540,
                            "name": "Identifier",
                            "src": "1770:8:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 535,
                              "type": "contract PublicSuffixList",
                              "value": "_suffixes"
                            },
                            "id": 541,
                            "name": "Identifier",
                            "src": "1781:9:1"
                          }
                        ],
                        "id": 542,
                        "name": "Assignment",
                        "src": "1770:20:1"
                      }
                    ],
                    "id": 543,
                    "name": "ExpressionStatement",
                    "src": "1770:20:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 448,
                              "type": "function (address)",
                              "value": "NewPublicSuffixList"
                            },
                            "id": 544,
                            "name": "Identifier",
                            "src": "1805:19:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_PublicSuffixList_$881",
                                      "typeString": "contract PublicSuffixList"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 545,
                                    "name": "ElementaryTypeName",
                                    "src": "1825:7:1"
                                  }
                                ],
                                "id": 546,
                                "name": "ElementaryTypeNameExpression",
                                "src": "1825:7:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 408,
                                  "type": "contract PublicSuffixList",
                                  "value": "suffixes"
                                },
                                "id": 547,
                                "name": "Identifier",
                                "src": "1833:8:1"
                              }
                            ],
                            "id": 548,
                            "name": "FunctionCall",
                            "src": "1825:17:1"
                          }
                        ],
                        "id": 549,
                        "name": "FunctionCall",
                        "src": "1805:38:1"
                      }
                    ],
                    "id": 550,
                    "name": "EmitStatement",
                    "src": "1800:43:1"
                  }
                ],
                "id": 551,
                "name": "Block",
                "src": "1760:90:1"
              }
            ],
            "id": 552,
            "name": "FunctionDefinition",
            "src": "1686:164:1"
          },
          {
            "attributes": {
              "functionSelector": "be27b22c",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "claim",
              "scope": 814,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Claims a name by proving ownership of its DNS equivalent.\n @param name The name to claim, in DNS wire format.\n @param proof A DNS RRSet proving ownership of the name. Must be verified\n        in the DNSSEC oracle before calling. This RRSET must contain a TXT\n        record for '_ens.' + name, with the value 'a=0x...'. Ownership of\n        the name will be transferred to the address specified in the TXT\n        record."
                },
                "id": 553,
                "name": "StructuredDocumentation",
                "src": "1856:481:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "name",
                      "scope": 639,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 554,
                        "name": "ElementaryTypeName",
                        "src": "2357:5:1"
                      }
                    ],
                    "id": 555,
                    "name": "VariableDeclaration",
                    "src": "2357:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "proof",
                      "scope": 639,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 556,
                        "name": "ElementaryTypeName",
                        "src": "2376:5:1"
                      }
                    ],
                    "id": 557,
                    "name": "VariableDeclaration",
                    "src": "2376:18:1"
                  }
                ],
                "id": 558,
                "name": "ParameterList",
                "src": "2356:39:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 559,
                "name": "ParameterList",
                "src": "2403:0:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        561
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "labelLen",
                          "scope": 638,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 560,
                            "name": "ElementaryTypeName",
                            "src": "2444:4:1"
                          }
                        ],
                        "id": 561,
                        "name": "VariableDeclaration",
                        "src": "2444:13:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint8",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "readUint8",
                              "referencedDeclaration": 1764,
                              "type": "function (bytes memory,uint256) pure returns (uint8)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 555,
                                  "type": "bytes memory",
                                  "value": "name"
                                },
                                "id": 562,
                                "name": "Identifier",
                                "src": "2460:4:1"
                              }
                            ],
                            "id": 563,
                            "name": "MemberAccess",
                            "src": "2460:14:1"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 564,
                            "name": "Literal",
                            "src": "2475:1:1"
                          }
                        ],
                        "id": 565,
                        "name": "FunctionCall",
                        "src": "2460:17:1"
                      }
                    ],
                    "id": 566,
                    "name": "VariableDeclarationStatement",
                    "src": "2444:33:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        568
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "labelHash",
                          "scope": 638,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 567,
                            "name": "ElementaryTypeName",
                            "src": "2487:7:1"
                          }
                        ],
                        "id": 568,
                        "name": "VariableDeclaration",
                        "src": "2487:17:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "keccak",
                              "referencedDeclaration": 1476,
                              "type": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 555,
                                  "type": "bytes memory",
                                  "value": "name"
                                },
                                "id": 569,
                                "name": "Identifier",
                                "src": "2507:4:1"
                              }
                            ],
                            "id": 570,
                            "name": "MemberAccess",
                            "src": "2507:11:1"
                          },
                          {
                            "attributes": {
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 571,
                            "name": "Literal",
                            "src": "2519:1:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 561,
                              "type": "uint256",
                              "value": "labelLen"
                            },
                            "id": 572,
                            "name": "Identifier",
                            "src": "2522:8:1"
                          }
                        ],
                        "id": 573,
                        "name": "FunctionCall",
                        "src": "2507:24:1"
                      }
                    ],
                    "id": 574,
                    "name": "VariableDeclarationStatement",
                    "src": "2487:44:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        576
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "parentName",
                          "scope": 638,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 575,
                            "name": "ElementaryTypeName",
                            "src": "2600:5:1"
                          }
                        ],
                        "id": 576,
                        "name": "VariableDeclaration",
                        "src": "2600:23:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "substring",
                              "referencedDeclaration": 1955,
                              "type": "function (bytes memory,uint256,uint256) pure returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 555,
                                  "type": "bytes memory",
                                  "value": "name"
                                },
                                "id": 577,
                                "name": "Identifier",
                                "src": "2626:4:1"
                              }
                            ],
                            "id": 578,
                            "name": "MemberAccess",
                            "src": "2626:14:1"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 561,
                                  "type": "uint256",
                                  "value": "labelLen"
                                },
                                "id": 579,
                                "name": "Identifier",
                                "src": "2641:8:1"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 580,
                                "name": "Literal",
                                "src": "2652:1:1"
                              }
                            ],
                            "id": 581,
                            "name": "BinaryOperation",
                            "src": "2641:12:1"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "-",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 555,
                                          "type": "bytes memory",
                                          "value": "name"
                                        },
                                        "id": 582,
                                        "name": "Identifier",
                                        "src": "2655:4:1"
                                      }
                                    ],
                                    "id": 583,
                                    "name": "MemberAccess",
                                    "src": "2655:11:1"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 561,
                                      "type": "uint256",
                                      "value": "labelLen"
                                    },
                                    "id": 584,
                                    "name": "Identifier",
                                    "src": "2669:8:1"
                                  }
                                ],
                                "id": 585,
                                "name": "BinaryOperation",
                                "src": "2655:22:1"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 586,
                                "name": "Literal",
                                "src": "2680:1:1"
                              }
                            ],
                            "id": 587,
                            "name": "BinaryOperation",
                            "src": "2655:26:1"
                          }
                        ],
                        "id": 588,
                        "name": "FunctionCall",
                        "src": "2626:56:1"
                      }
                    ],
                    "id": 589,
                    "name": "VariableDeclarationStatement",
                    "src": "2600:82:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5df6cb05960cf5aa4f7482cb9ceb06b354899f3958a55d842cf18bd9cb0b227a",
                                  "typeString": "literal_string \"Parent name must be a public suffix\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 590,
                            "name": "Identifier",
                            "src": "2692:7:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "isPublicSuffix",
                                  "referencedDeclaration": 880,
                                  "type": "function (bytes memory) view external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 408,
                                      "type": "contract PublicSuffixList",
                                      "value": "suffixes"
                                    },
                                    "id": 591,
                                    "name": "Identifier",
                                    "src": "2700:8:1"
                                  }
                                ],
                                "id": 592,
                                "name": "MemberAccess",
                                "src": "2700:23:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 576,
                                  "type": "bytes memory",
                                  "value": "parentName"
                                },
                                "id": 593,
                                "name": "Identifier",
                                "src": "2724:10:1"
                              }
                            ],
                            "id": 594,
                            "name": "FunctionCall",
                            "src": "2700:35:1"
                          },
                          {
                            "attributes": {
                              "hexvalue": "506172656e74206e616d65206d7573742062652061207075626c696320737566666978",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"Parent name must be a public suffix\"",
                              "value": "Parent name must be a public suffix"
                            },
                            "id": 595,
                            "name": "Literal",
                            "src": "2737:37:1"
                          }
                        ],
                        "id": 596,
                        "name": "FunctionCall",
                        "src": "2692:83:1"
                      }
                    ],
                    "id": 597,
                    "name": "ExpressionStatement",
                    "src": "2692:83:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        599
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "rootNode",
                          "scope": 638,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 598,
                            "name": "ElementaryTypeName",
                            "src": "2834:7:1"
                          }
                        ],
                        "id": 599,
                        "name": "VariableDeclaration",
                        "src": "2834:16:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 813,
                              "type": "function (bytes memory,uint256) returns (bytes32)",
                              "value": "enableNode"
                            },
                            "id": 600,
                            "name": "Identifier",
                            "src": "2853:10:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 576,
                              "type": "bytes memory",
                              "value": "parentName"
                            },
                            "id": 601,
                            "name": "Identifier",
                            "src": "2864:10:1"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 602,
                            "name": "Literal",
                            "src": "2876:1:1"
                          }
                        ],
                        "id": 603,
                        "name": "FunctionCall",
                        "src": "2853:25:1"
                      }
                    ],
                    "id": 604,
                    "name": "VariableDeclarationStatement",
                    "src": "2834:44:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        606
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "addr",
                          "scope": 638,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 605,
                            "name": "ElementaryTypeName",
                            "src": "2889:7:1"
                          }
                        ],
                        "id": 606,
                        "name": "VariableDeclaration",
                        "src": "2889:12:1"
                      }
                    ],
                    "id": 607,
                    "name": "VariableDeclarationStatement",
                    "src": "2889:12:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(address,)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 606,
                                  "type": "address",
                                  "value": "addr"
                                },
                                "id": 608,
                                "name": "Identifier",
                                "src": "2912:4:1"
                              }
                            ],
                            "id": 609,
                            "name": "TupleExpression",
                            "src": "2911:7:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(address,bool)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DNSSEC_$2273",
                                      "typeString": "contract DNSSEC"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getOwnerAddress",
                                  "referencedDeclaration": 166,
                                  "type": "function (contract DNSSEC,bytes memory,bytes memory) view returns (address,bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 390,
                                      "type": "type(library DNSClaimChecker)",
                                      "value": "DNSClaimChecker"
                                    },
                                    "id": 610,
                                    "name": "Identifier",
                                    "src": "2921:15:1"
                                  }
                                ],
                                "id": 611,
                                "name": "MemberAccess",
                                "src": "2921:31:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 404,
                                  "type": "contract DNSSEC",
                                  "value": "oracle"
                                },
                                "id": 612,
                                "name": "Identifier",
                                "src": "2953:6:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 555,
                                  "type": "bytes memory",
                                  "value": "name"
                                },
                                "id": 613,
                                "name": "Identifier",
                                "src": "2961:4:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 557,
                                  "type": "bytes memory",
                                  "value": "proof"
                                },
                                "id": 614,
                                "name": "Identifier",
                                "src": "2967:5:1"
                              }
                            ],
                            "id": 615,
                            "name": "FunctionCall",
                            "src": "2921:52:1"
                          }
                        ],
                        "id": 616,
                        "name": "Assignment",
                        "src": "2911:62:1"
                      }
                    ],
                    "id": 617,
                    "name": "ExpressionStatement",
                    "src": "2911:62:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "setSubnodeOwner",
                              "referencedDeclaration": 3467,
                              "type": "function (bytes32,bytes32,address) external returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 406,
                                  "type": "contract ENS",
                                  "value": "ens"
                                },
                                "id": 618,
                                "name": "Identifier",
                                "src": "2984:3:1"
                              }
                            ],
                            "id": 620,
                            "name": "MemberAccess",
                            "src": "2984:19:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 599,
                              "type": "bytes32",
                              "value": "rootNode"
                            },
                            "id": 621,
                            "name": "Identifier",
                            "src": "3004:8:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 568,
                              "type": "bytes32",
                              "value": "labelHash"
                            },
                            "id": 622,
                            "name": "Identifier",
                            "src": "3014:9:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 606,
                              "type": "address",
                              "value": "addr"
                            },
                            "id": 623,
                            "name": "Identifier",
                            "src": "3025:4:1"
                          }
                        ],
                        "id": 624,
                        "name": "FunctionCall",
                        "src": "2984:46:1"
                      }
                    ],
                    "id": 625,
                    "name": "ExpressionStatement",
                    "src": "2984:46:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 440,
                              "type": "function (bytes32,address,bytes memory)",
                              "value": "Claim"
                            },
                            "id": 626,
                            "name": "Identifier",
                            "src": "3045:5:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -8,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 627,
                                "name": "Identifier",
                                "src": "3051:9:1"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encodePacked",
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -1,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 628,
                                        "name": "Identifier",
                                        "src": "3061:3:1"
                                      }
                                    ],
                                    "id": 629,
                                    "name": "MemberAccess",
                                    "src": "3061:16:1"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 599,
                                      "type": "bytes32",
                                      "value": "rootNode"
                                    },
                                    "id": 630,
                                    "name": "Identifier",
                                    "src": "3078:8:1"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 568,
                                      "type": "bytes32",
                                      "value": "labelHash"
                                    },
                                    "id": 631,
                                    "name": "Identifier",
                                    "src": "3088:9:1"
                                  }
                                ],
                                "id": 632,
                                "name": "FunctionCall",
                                "src": "3061:37:1"
                              }
                            ],
                            "id": 633,
                            "name": "FunctionCall",
                            "src": "3051:48:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 606,
                              "type": "address",
                              "value": "addr"
                            },
                            "id": 634,
                            "name": "Identifier",
                            "src": "3101:4:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 555,
                              "type": "bytes memory",
                              "value": "name"
                            },
                            "id": 635,
                            "name": "Identifier",
                            "src": "3107:4:1"
                          }
                        ],
                        "id": 636,
                        "name": "FunctionCall",
                        "src": "3045:67:1"
                      }
                    ],
                    "id": 637,
                    "name": "EmitStatement",
                    "src": "3040:72:1"
                  }
                ],
                "id": 638,
                "name": "Block",
                "src": "2403:716:1"
              }
            ],
            "id": 639,
            "name": "FunctionDefinition",
            "src": "2342:777:1"
          },
          {
            "attributes": {
              "functionSelector": "d94585bd",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "proveAndClaim",
              "scope": 814,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Submits proofs to the DNSSEC oracle, then claims a name using those proofs.\n @param name The name to claim, in DNS wire format.\n @param input The data to be passed to the Oracle's `submitProofs` function. The last\n        proof must be the TXT record required by the registrar.\n @param proof The proof record for the first element in input."
                },
                "id": 640,
                "name": "StructuredDocumentation",
                "src": "3125:388:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "name",
                      "scope": 663,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 641,
                        "name": "ElementaryTypeName",
                        "src": "3541:5:1"
                      }
                    ],
                    "id": 642,
                    "name": "VariableDeclaration",
                    "src": "3541:17:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "input",
                      "scope": 663,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 643,
                        "name": "ElementaryTypeName",
                        "src": "3560:5:1"
                      }
                    ],
                    "id": 644,
                    "name": "VariableDeclaration",
                    "src": "3560:18:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "proof",
                      "scope": 663,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 645,
                        "name": "ElementaryTypeName",
                        "src": "3580:5:1"
                      }
                    ],
                    "id": 646,
                    "name": "VariableDeclaration",
                    "src": "3580:18:1"
                  }
                ],
                "id": 647,
                "name": "ParameterList",
                "src": "3540:59:1"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 648,
                "name": "ParameterList",
                "src": "3607:0:1"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 646,
                              "type": "bytes memory",
                              "value": "proof"
                            },
                            "id": 649,
                            "name": "Identifier",
                            "src": "3617:5:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "submitRRSets",
                                  "referencedDeclaration": 2226,
                                  "type": "function (bytes memory,bytes memory) external returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 404,
                                      "type": "contract DNSSEC",
                                      "value": "oracle"
                                    },
                                    "id": 650,
                                    "name": "Identifier",
                                    "src": "3625:6:1"
                                  }
                                ],
                                "id": 651,
                                "name": "MemberAccess",
                                "src": "3625:19:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 644,
                                  "type": "bytes memory",
                                  "value": "input"
                                },
                                "id": 652,
                                "name": "Identifier",
                                "src": "3645:5:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 646,
                                  "type": "bytes memory",
                                  "value": "proof"
                                },
                                "id": 653,
                                "name": "Identifier",
                                "src": "3652:5:1"
                              }
                            ],
                            "id": 654,
                            "name": "FunctionCall",
                            "src": "3625:33:1"
                          }
                        ],
                        "id": 655,
                        "name": "Assignment",
                        "src": "3617:41:1"
                      }
                    ],
                    "id": 656,
                    "name": "ExpressionStatement",
                    "src": "3617:41:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 639,
                              "type": "function (bytes memory,bytes memory)",
                              "value": "claim"
                            },
                            "id": 657,
                            "name": "Identifier",
                            "src": "3668:5:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 642,
                              "type": "bytes memory",
                              "value": "name"
                            },
                            "id": 658,
                            "name": "Identifier",
                            "src": "3674:4:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 646,
                              "type": "bytes memory",
                              "value": "proof"
                            },
                            "id": 659,
                            "name": "Identifier",
                            "src": "3680:5:1"
                          }
                        ],
                        "id": 660,
                        "name": "FunctionCall",
                        "src": "3668:18:1"
                      }
                    ],
                    "id": 661,
                    "name": "ExpressionStatement",
                    "src": "3668:18:1"
                  }
                ],
                "id": 662,
                "name": "Block",
                "src": "3607:86:1"
              }
            ],
            "id": 663,
            "name": "FunctionDefinition",
            "src": "3518:175:1"
          },
          {
            "attributes": {
              "functionSelector": "01ffc9a7",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "supportsInterface",
              "scope": 814,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "interfaceID",
                      "scope": 679,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 664,
                        "name": "ElementaryTypeName",
                        "src": "3726:6:1"
                      }
                    ],
                    "id": 665,
                    "name": "VariableDeclaration",
                    "src": "3726:18:1"
                  }
                ],
                "id": 666,
                "name": "ParameterList",
                "src": "3725:20:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 679,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 667,
                        "name": "ElementaryTypeName",
                        "src": "3769:4:1"
                      }
                    ],
                    "id": 668,
                    "name": "VariableDeclaration",
                    "src": "3769:4:1"
                  }
                ],
                "id": 669,
                "name": "ParameterList",
                "src": "3768:6:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 669
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "||",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 665,
                                  "type": "bytes4",
                                  "value": "interfaceID"
                                },
                                "id": 670,
                                "name": "Identifier",
                                "src": "3792:11:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 416,
                                  "type": "bytes4",
                                  "value": "INTERFACE_META_ID"
                                },
                                "id": 671,
                                "name": "Identifier",
                                "src": "3807:17:1"
                              }
                            ],
                            "id": 672,
                            "name": "BinaryOperation",
                            "src": "3792:32:1"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 665,
                                  "type": "bytes4",
                                  "value": "interfaceID"
                                },
                                "id": 673,
                                "name": "Identifier",
                                "src": "3843:11:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 432,
                                  "type": "bytes4",
                                  "value": "DNSSEC_CLAIM_ID"
                                },
                                "id": 674,
                                "name": "Identifier",
                                "src": "3858:15:1"
                              }
                            ],
                            "id": 675,
                            "name": "BinaryOperation",
                            "src": "3843:30:1"
                          }
                        ],
                        "id": 676,
                        "name": "BinaryOperation",
                        "src": "3792:81:1"
                      }
                    ],
                    "id": 677,
                    "name": "Return",
                    "src": "3785:88:1"
                  }
                ],
                "id": 678,
                "name": "Block",
                "src": "3775:105:1"
              }
            ],
            "id": 679,
            "name": "FunctionDefinition",
            "src": "3699:181:1"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "enableNode",
              "scope": 814,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "domain",
                      "scope": 813,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 680,
                        "name": "ElementaryTypeName",
                        "src": "3906:5:1"
                      }
                    ],
                    "id": 681,
                    "name": "VariableDeclaration",
                    "src": "3906:19:1"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "offset",
                      "scope": 813,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 682,
                        "name": "ElementaryTypeName",
                        "src": "3927:4:1"
                      }
                    ],
                    "id": 683,
                    "name": "VariableDeclaration",
                    "src": "3927:11:1"
                  }
                ],
                "id": 684,
                "name": "ParameterList",
                "src": "3905:34:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "node",
                      "scope": 813,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 685,
                        "name": "ElementaryTypeName",
                        "src": "3957:7:1"
                      }
                    ],
                    "id": 686,
                    "name": "VariableDeclaration",
                    "src": "3957:12:1"
                  }
                ],
                "id": 687,
                "name": "ParameterList",
                "src": "3956:14:1"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        689
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "len",
                          "scope": 812,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 688,
                            "name": "ElementaryTypeName",
                            "src": "3981:4:1"
                          }
                        ],
                        "id": 689,
                        "name": "VariableDeclaration",
                        "src": "3981:8:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint8",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "readUint8",
                              "referencedDeclaration": 1764,
                              "type": "function (bytes memory,uint256) pure returns (uint8)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 681,
                                  "type": "bytes memory",
                                  "value": "domain"
                                },
                                "id": 690,
                                "name": "Identifier",
                                "src": "3992:6:1"
                              }
                            ],
                            "id": 691,
                            "name": "MemberAccess",
                            "src": "3992:16:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 683,
                              "type": "uint256",
                              "value": "offset"
                            },
                            "id": 692,
                            "name": "Identifier",
                            "src": "4009:6:1"
                          }
                        ],
                        "id": 693,
                        "name": "FunctionCall",
                        "src": "3992:24:1"
                      }
                    ],
                    "id": 694,
                    "name": "VariableDeclarationStatement",
                    "src": "3981:35:1"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 689,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 695,
                            "name": "Identifier",
                            "src": "4029:3:1"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 696,
                            "name": "Literal",
                            "src": "4036:1:1"
                          }
                        ],
                        "id": 697,
                        "name": "BinaryOperation",
                        "src": "4029:8:1"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 687
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes32",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes32)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "bytes32"
                                        },
                                        "id": 698,
                                        "name": "ElementaryTypeName",
                                        "src": "4060:7:1"
                                      }
                                    ],
                                    "id": 699,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4060:7:1"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 700,
                                    "name": "Literal",
                                    "src": "4068:1:1"
                                  }
                                ],
                                "id": 701,
                                "name": "FunctionCall",
                                "src": "4060:10:1"
                              }
                            ],
                            "id": 702,
                            "name": "Return",
                            "src": "4053:17:1"
                          }
                        ],
                        "id": 703,
                        "name": "Block",
                        "src": "4039:42:1"
                      }
                    ],
                    "id": 704,
                    "name": "IfStatement",
                    "src": "4026:55:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        706
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "parentNode",
                          "scope": 812,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 705,
                            "name": "ElementaryTypeName",
                            "src": "4091:7:1"
                          }
                        ],
                        "id": 706,
                        "name": "VariableDeclaration",
                        "src": "4091:18:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 813,
                              "type": "function (bytes memory,uint256) returns (bytes32)",
                              "value": "enableNode"
                            },
                            "id": 707,
                            "name": "Identifier",
                            "src": "4112:10:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 681,
                              "type": "bytes memory",
                              "value": "domain"
                            },
                            "id": 708,
                            "name": "Identifier",
                            "src": "4123:6:1"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 683,
                                      "type": "uint256",
                                      "value": "offset"
                                    },
                                    "id": 709,
                                    "name": "Identifier",
                                    "src": "4131:6:1"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 689,
                                      "type": "uint256",
                                      "value": "len"
                                    },
                                    "id": 710,
                                    "name": "Identifier",
                                    "src": "4140:3:1"
                                  }
                                ],
                                "id": 711,
                                "name": "BinaryOperation",
                                "src": "4131:12:1"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 712,
                                "name": "Literal",
                                "src": "4146:1:1"
                              }
                            ],
                            "id": 713,
                            "name": "BinaryOperation",
                            "src": "4131:16:1"
                          }
                        ],
                        "id": 714,
                        "name": "FunctionCall",
                        "src": "4112:36:1"
                      }
                    ],
                    "id": 715,
                    "name": "VariableDeclarationStatement",
                    "src": "4091:57:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        717
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "label",
                          "scope": 812,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 716,
                            "name": "ElementaryTypeName",
                            "src": "4158:7:1"
                          }
                        ],
                        "id": 717,
                        "name": "VariableDeclaration",
                        "src": "4158:13:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "keccak",
                              "referencedDeclaration": 1476,
                              "type": "function (bytes memory,uint256,uint256) pure returns (bytes32)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 681,
                                  "type": "bytes memory",
                                  "value": "domain"
                                },
                                "id": 718,
                                "name": "Identifier",
                                "src": "4174:6:1"
                              }
                            ],
                            "id": 719,
                            "name": "MemberAccess",
                            "src": "4174:13:1"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "+",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 683,
                                  "type": "uint256",
                                  "value": "offset"
                                },
                                "id": 720,
                                "name": "Identifier",
                                "src": "4188:6:1"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 721,
                                "name": "Literal",
                                "src": "4197:1:1"
                              }
                            ],
                            "id": 722,
                            "name": "BinaryOperation",
                            "src": "4188:10:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 689,
                              "type": "uint256",
                              "value": "len"
                            },
                            "id": 723,
                            "name": "Identifier",
                            "src": "4200:3:1"
                          }
                        ],
                        "id": 724,
                        "name": "FunctionCall",
                        "src": "4174:30:1"
                      }
                    ],
                    "id": 725,
                    "name": "VariableDeclarationStatement",
                    "src": "4158:46:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 686,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 726,
                            "name": "Identifier",
                            "src": "4214:4:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -8,
                                  "type": "function (bytes memory) pure returns (bytes32)",
                                  "value": "keccak256"
                                },
                                "id": 727,
                                "name": "Identifier",
                                "src": "4221:9:1"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "member_name": "encodePacked",
                                      "type": "function () pure returns (bytes memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -1,
                                          "type": "abi",
                                          "value": "abi"
                                        },
                                        "id": 728,
                                        "name": "Identifier",
                                        "src": "4231:3:1"
                                      }
                                    ],
                                    "id": 729,
                                    "name": "MemberAccess",
                                    "src": "4231:16:1"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 706,
                                      "type": "bytes32",
                                      "value": "parentNode"
                                    },
                                    "id": 730,
                                    "name": "Identifier",
                                    "src": "4248:10:1"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 717,
                                      "type": "bytes32",
                                      "value": "label"
                                    },
                                    "id": 731,
                                    "name": "Identifier",
                                    "src": "4260:5:1"
                                  }
                                ],
                                "id": 732,
                                "name": "FunctionCall",
                                "src": "4231:35:1"
                              }
                            ],
                            "id": 733,
                            "name": "FunctionCall",
                            "src": "4221:46:1"
                          }
                        ],
                        "id": 734,
                        "name": "Assignment",
                        "src": "4214:53:1"
                      }
                    ],
                    "id": 735,
                    "name": "ExpressionStatement",
                    "src": "4214:53:1"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        737
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "owner",
                          "scope": 812,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 736,
                            "name": "ElementaryTypeName",
                            "src": "4277:7:1"
                          }
                        ],
                        "id": 737,
                        "name": "VariableDeclaration",
                        "src": "4277:13:1"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "owner",
                              "referencedDeclaration": 3502,
                              "type": "function (bytes32) view external returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 406,
                                  "type": "contract ENS",
                                  "value": "ens"
                                },
                                "id": 738,
                                "name": "Identifier",
                                "src": "4293:3:1"
                              }
                            ],
                            "id": 739,
                            "name": "MemberAccess",
                            "src": "4293:9:1"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 686,
                              "type": "bytes32",
                              "value": "node"
                            },
                            "id": 740,
                            "name": "Identifier",
                            "src": "4303:4:1"
                          }
                        ],
                        "id": 741,
                        "name": "FunctionCall",
                        "src": "4293:15:1"
                      }
                    ],
                    "id": 742,
                    "name": "VariableDeclarationStatement",
                    "src": "4277:31:1"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_63425cf3a05c76cf1155c52bcdbd99eb1081a9ada1a588d0e70852574c220981",
                                  "typeString": "literal_string \"Cannot enable a name owned by someone else\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 743,
                            "name": "Identifier",
                            "src": "4318:7:1"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 737,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 744,
                                    "name": "Identifier",
                                    "src": "4326:5:1"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address"
                                            },
                                            "id": 745,
                                            "name": "ElementaryTypeName",
                                            "src": "4335:7:1"
                                          }
                                        ],
                                        "id": 746,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "4335:7:1"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 747,
                                        "name": "Literal",
                                        "src": "4343:1:1"
                                      }
                                    ],
                                    "id": 748,
                                    "name": "FunctionCall",
                                    "src": "4335:10:1"
                                  }
                                ],
                                "id": 749,
                                "name": "BinaryOperation",
                                "src": "4326:19:1"
                              },
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 737,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 750,
                                    "name": "Identifier",
                                    "src": "4349:5:1"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                              "typeString": "contract DNSRegistrar"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "address"
                                            },
                                            "id": 751,
                                            "name": "ElementaryTypeName",
                                            "src": "4358:7:1"
                                          }
                                        ],
                                        "id": 752,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "4358:7:1"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": -28,
                                          "type": "contract DNSRegistrar",
                                          "value": "this"
                                        },
                                        "id": 753,
                                        "name": "Identifier",
                                        "src": "4366:4:1"
                                      }
                                    ],
                                    "id": 754,
                                    "name": "FunctionCall",
                                    "src": "4358:13:1"
                                  }
                                ],
                                "id": 755,
                                "name": "BinaryOperation",
                                "src": "4349:22:1"
                              }
                            ],
                            "id": 756,
                            "name": "BinaryOperation",
                            "src": "4326:45:1"
                          },
                          {
                            "attributes": {
                              "hexvalue": "43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6d656f6e6520656c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"Cannot enable a name owned by someone else\"",
                              "value": "Cannot enable a name owned by someone else"
                            },
                            "id": 757,
                            "name": "Literal",
                            "src": "4373:44:1"
                          }
                        ],
                        "id": 758,
                        "name": "FunctionCall",
                        "src": "4318:100:1"
                      }
                    ],
                    "id": 759,
                    "name": "ExpressionStatement",
                    "src": "4318:100:1"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 737,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 760,
                            "name": "Identifier",
                            "src": "4431:5:1"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                      "typeString": "contract DNSRegistrar"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 761,
                                    "name": "ElementaryTypeName",
                                    "src": "4440:7:1"
                                  }
                                ],
                                "id": 762,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4440:7:1"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": -28,
                                  "type": "contract DNSRegistrar",
                                  "value": "this"
                                },
                                "id": 763,
                                "name": "Identifier",
                                "src": "4448:4:1"
                              }
                            ],
                            "id": 764,
                            "name": "FunctionCall",
                            "src": "4440:13:1"
                          }
                        ],
                        "id": 765,
                        "name": "BinaryOperation",
                        "src": "4431:22:1"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 706,
                                      "type": "bytes32",
                                      "value": "parentNode"
                                    },
                                    "id": 766,
                                    "name": "Identifier",
                                    "src": "4472:10:1"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bytes32",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes32)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "bytes32"
                                            },
                                            "id": 767,
                                            "name": "ElementaryTypeName",
                                            "src": "4486:7:1"
                                          }
                                        ],
                                        "id": 768,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "4486:7:1"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 769,
                                        "name": "Literal",
                                        "src": "4494:1:1"
                                      }
                                    ],
                                    "id": 770,
                                    "name": "FunctionCall",
                                    "src": "4486:10:1"
                                  }
                                ],
                                "id": 771,
                                "name": "BinaryOperation",
                                "src": "4472:24:1"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        773
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "root",
                                          "scope": 794,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "contract Root",
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "Root",
                                              "referencedDeclaration": 4178,
                                              "type": "contract Root"
                                            },
                                            "id": 772,
                                            "name": "UserDefinedTypeName",
                                            "src": "4516:4:1"
                                          }
                                        ],
                                        "id": 773,
                                        "name": "VariableDeclaration",
                                        "src": "4516:9:1"
                                      },
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract Root",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4178,
                                              "type": "type(contract Root)",
                                              "value": "Root"
                                            },
                                            "id": 774,
                                            "name": "Identifier",
                                            "src": "4528:4:1"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "address",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_bytes32",
                                                      "typeString": "bytes32"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "owner",
                                                  "referencedDeclaration": 3502,
                                                  "type": "function (bytes32) view external returns (address)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 406,
                                                      "type": "contract ENS",
                                                      "value": "ens"
                                                    },
                                                    "id": 775,
                                                    "name": "Identifier",
                                                    "src": "4533:3:1"
                                                  }
                                                ],
                                                "id": 776,
                                                "name": "MemberAccess",
                                                "src": "4533:9:1"
                                              },
                                              {
                                                "attributes": {
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "bytes32",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_rational_0_by_1",
                                                          "typeString": "int_const 0"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(bytes32)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "name": "bytes32"
                                                        },
                                                        "id": 777,
                                                        "name": "ElementaryTypeName",
                                                        "src": "4543:7:1"
                                                      }
                                                    ],
                                                    "id": 778,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "4543:7:1"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "hexvalue": "30",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "token": "number",
                                                      "type": "int_const 0",
                                                      "value": "0"
                                                    },
                                                    "id": 779,
                                                    "name": "Literal",
                                                    "src": "4551:1:1"
                                                  }
                                                ],
                                                "id": 780,
                                                "name": "FunctionCall",
                                                "src": "4543:10:1"
                                              }
                                            ],
                                            "id": 781,
                                            "name": "FunctionCall",
                                            "src": "4533:21:1"
                                          }
                                        ],
                                        "id": 782,
                                        "name": "FunctionCall",
                                        "src": "4528:27:1"
                                      }
                                    ],
                                    "id": 783,
                                    "name": "VariableDeclarationStatement",
                                    "src": "4516:39:1"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "tuple()",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "setSubnodeOwner",
                                              "referencedDeclaration": 4132,
                                              "type": "function (bytes32,address) external"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 773,
                                                  "type": "contract Root",
                                                  "value": "root"
                                                },
                                                "id": 784,
                                                "name": "Identifier",
                                                "src": "4573:4:1"
                                              }
                                            ],
                                            "id": 786,
                                            "name": "MemberAccess",
                                            "src": "4573:20:1"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 717,
                                              "type": "bytes32",
                                              "value": "label"
                                            },
                                            "id": 787,
                                            "name": "Identifier",
                                            "src": "4594:5:1"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "address",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                                      "typeString": "contract DNSRegistrar"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(address)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "address"
                                                    },
                                                    "id": 788,
                                                    "name": "ElementaryTypeName",
                                                    "src": "4601:7:1"
                                                  }
                                                ],
                                                "id": 789,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "4601:7:1"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": -28,
                                                  "type": "contract DNSRegistrar",
                                                  "value": "this"
                                                },
                                                "id": 790,
                                                "name": "Identifier",
                                                "src": "4609:4:1"
                                              }
                                            ],
                                            "id": 791,
                                            "name": "FunctionCall",
                                            "src": "4601:13:1"
                                          }
                                        ],
                                        "id": 792,
                                        "name": "FunctionCall",
                                        "src": "4573:42:1"
                                      }
                                    ],
                                    "id": 793,
                                    "name": "ExpressionStatement",
                                    "src": "4573:42:1"
                                  }
                                ],
                                "id": 794,
                                "name": "Block",
                                "src": "4498:132:1"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "bytes32",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "setSubnodeOwner",
                                              "referencedDeclaration": 3467,
                                              "type": "function (bytes32,bytes32,address) external returns (bytes32)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 406,
                                                  "type": "contract ENS",
                                                  "value": "ens"
                                                },
                                                "id": 795,
                                                "name": "Identifier",
                                                "src": "4654:3:1"
                                              }
                                            ],
                                            "id": 797,
                                            "name": "MemberAccess",
                                            "src": "4654:19:1"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 706,
                                              "type": "bytes32",
                                              "value": "parentNode"
                                            },
                                            "id": 798,
                                            "name": "Identifier",
                                            "src": "4674:10:1"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 717,
                                              "type": "bytes32",
                                              "value": "label"
                                            },
                                            "id": 799,
                                            "name": "Identifier",
                                            "src": "4686:5:1"
                                          },
                                          {
                                            "attributes": {
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "address",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_contract$_DNSRegistrar_$814",
                                                      "typeString": "contract DNSRegistrar"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(address)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "name": "address"
                                                    },
                                                    "id": 800,
                                                    "name": "ElementaryTypeName",
                                                    "src": "4693:7:1"
                                                  }
                                                ],
                                                "id": 801,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "4693:7:1"
                                              },
                                              {
                                                "attributes": {
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": -28,
                                                  "type": "contract DNSRegistrar",
                                                  "value": "this"
                                                },
                                                "id": 802,
                                                "name": "Identifier",
                                                "src": "4701:4:1"
                                              }
                                            ],
                                            "id": 803,
                                            "name": "FunctionCall",
                                            "src": "4693:13:1"
                                          }
                                        ],
                                        "id": 804,
                                        "name": "FunctionCall",
                                        "src": "4654:53:1"
                                      }
                                    ],
                                    "id": 805,
                                    "name": "ExpressionStatement",
                                    "src": "4654:53:1"
                                  }
                                ],
                                "id": 806,
                                "name": "Block",
                                "src": "4636:86:1"
                              }
                            ],
                            "id": 807,
                            "name": "IfStatement",
                            "src": "4469:253:1"
                          }
                        ],
                        "id": 808,
                        "name": "Block",
                        "src": "4455:277:1"
                      }
                    ],
                    "id": 809,
                    "name": "IfStatement",
                    "src": "4428:304:1"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 687
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 686,
                          "type": "bytes32",
                          "value": "node"
                        },
                        "id": 810,
                        "name": "Identifier",
                        "src": "4748:4:1"
                      }
                    ],
                    "id": 811,
                    "name": "Return",
                    "src": "4741:11:1"
                  }
                ],
                "id": 812,
                "name": "Block",
                "src": "3971:788:1"
              }
            ],
            "id": 813,
            "name": "FunctionDefinition",
            "src": "3886:873:1"
          }
        ],
        "id": 814,
        "name": "ContractDefinition",
        "src": "424:4337:1"
      }
    ],
    "id": 815,
    "name": "SourceUnit",
    "src": "0:4762:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.4+commit.3f05b770.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.3",
  "updatedAt": "2021-01-21T03:26:26.128Z",
  "devdoc": {
    "details": "An ENS registrar that allows the owner of a DNS name to claim the      corresponding name in ENS.",
    "kind": "dev",
    "methods": {
      "claim(bytes,bytes)": {
        "details": "Claims a name by proving ownership of its DNS equivalent.",
        "params": {
          "name": "The name to claim, in DNS wire format.",
          "proof": "A DNS RRSet proving ownership of the name. Must be verified        in the DNSSEC oracle before calling. This RRSET must contain a TXT        record for '_ens.' + name, with the value 'a=0x...'. Ownership of        the name will be transferred to the address specified in the TXT        record."
        }
      },
      "proveAndClaim(bytes,bytes,bytes)": {
        "details": "Submits proofs to the DNSSEC oracle, then claims a name using those proofs.",
        "params": {
          "input": "The data to be passed to the Oracle's `submitProofs` function. The last        proof must be the TXT record required by the registrar.",
          "name": "The name to claim, in DNS wire format.",
          "proof": "The proof record for the first element in input."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}