{
  "contractName": "DNSRegistrar",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_dnssec",
          "type": "address"
        },
        {
          "name": "_ens",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "dnsname",
          "type": "bytes"
        }
      ],
      "name": "Claim",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "bytes"
        },
        {
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "claim",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "name",
          "type": "bytes"
        },
        {
          "name": "input",
          "type": "bytes"
        },
        {
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "proveAndClaim",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5060405160408061161e8339810180604052604081101561003057600080fd5b810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050611541806100dd6000396000f3fe60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100725780633f15457f146100e45780637dc0d1d01461013b578063be27b22c14610192578063d94585bd146102f1575b600080fd5b34801561007e57600080fd5b506100ca6004803603602081101561009557600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506104e7565b604051808215151515815260200191505060405180910390f35b3480156100f057600080fd5b506100f9610651565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014757600080fd5b50610150610677565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561019e57600080fd5b506102ef600480360360408110156101b557600080fd5b81019080803590602001906401000000008111156101d257600080fd5b8201836020820111156101e457600080fd5b8035906020019184600183028401116401000000008311171561020657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561026957600080fd5b82018360208201111561027b57600080fd5b8035906020019184600183028401116401000000008311171561029d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061069c565b005b3480156102fd57600080fd5b506104e56004803603606081101561031457600080fd5b810190808035906020019064010000000081111561033157600080fd5b82018360208201111561034357600080fd5b8035906020019184600183028401116401000000008311171561036557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460018302840111640100000000831117156103fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561045f57600080fd5b82018360208201111561047157600080fd5b8035906020019184600183028401116401000000008311171561049357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506108b1565b005b600060405180807f737570706f727473496e74657266616365286279746573342900000000000000815250601901905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064a575060405180807f6f7261636c6528290000000000000000000000000000000000000000000000008152506008019050604051809103902060405180807f70726f7665416e64436c61696d2862797465732c62797465732c6279746573298152506020019050604051809103902060405180807f636c61696d2862797465732c62797465732900000000000000000000000000008152506012019050604051809103902018187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006106ca6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168484610ab5565b50809150506000806106db85610e3b565b8092508193505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238284866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1681836040516020018083815260200182815260200192505050604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba39876040518080602001828103825283818151815260200191508051906020019080838360005b83811015610870578082015181840152602081019050610855565b50505050905090810190601f16801561089d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376a14d1d83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561095f578082015181840152602081019050610944565b50505050905090810190601f16801561098c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156109c55780820151818401526020810190506109aa565b50505050905090810190601f1680156109f25780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610a5157600080fd5b810190808051640100000000811115610a6957600080fd5b82810190506020810184811115610a7f57600080fd5b8151856001820283011164010000000082111715610a9c57600080fd5b50509291905050509050610ab0838261069c565b505050565b600080610ac06114af565b610ad7600586510182610f0a90919063ffffffff16565b50610b206040805190810160405280600581526020017f045f656e7300000000000000000000000000000000000000000000000000000081525082610f6190919063ffffffff16565b50610b348582610f6190919063ffffffff16565b506000808773ffffffffffffffffffffffffffffffffffffffff1663087991bc601085600001516040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd4578082015181840152602081019050610bb9565b50505050905090810190601f168015610c015780820380516001836020036101000a031916815260200191505b50935050505060606040518083038186803b158015610c1f57600080fd5b505afa158015610c33573d6000803e3d6000fd5b505050506040513d6060811015610c4957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050909150809350819250505060006c01000000000000000000000000026bffffffffffffffffffffffff1916826bffffffffffffffffffffffff1916148015610cb7575060008651145b15610cce5760008081915094509450505050610e33565b85805190602001206bffffffffffffffffffffffff1916826bffffffffffffffffffffffff1916141515610d0157600080fd5b610d096114c9565b610d1d600088610f8390919063ffffffff16565b90505b610d2981610fad565b1515610e245742816080015163ffffffff16830167ffffffffffffffff1610151515610de3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001807f444e53207265636f7264206973207374616c653b2072656672657368206f722081526020017f64656c657465206974206265666f72652070726f63656564696e672e0000000081525060400191505060405180910390fd5b600080610df4898460a00151610fc3565b80935081925050508115610e145780600197509750505050505050610e33565b5050610e1f8161103a565b610d20565b50600080819150945094505050505b935093915050565b6000806000610e5460008561115090919063ffffffff16565b60ff1690506000610e71600183018661115090919063ffffffff16565b60ff1690506000610e906002838501018761115090919063ffffffff16565b60ff16141515610e9f57600080fd5b610eb5600183876111779092919063ffffffff16565b6000600102610ed28460020184896111779092919063ffffffff16565b604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120935093505050915091565b610f126114af565b6000602083811515610f2057fe5b06141515610f3d57602082811515610f3457fe5b06602003820191505b81836020018181525050604051808452600081528281016040525082905092915050565b610f696114af565b610f7b8384600001515184855161119c565b905092915050565b610f8b6114c9565b828160000181905250818160c0018181525050610fa78161103a565b92915050565b6000816000015151826020015110159050919050565b6000805b8351831015611028576000610fe5848661115090919063ffffffff16565b60ff169050600184019350600080610ffe878785611260565b8093508192505050811561101b5780600194509450505050611033565b8286019550505050610fc7565b600080819150915091505b9250929050565b8060c00151816020018181525050806000015151816020015110151561105f5761114d565b6000611073826000015183602001516112c9565b826020015101905061109281836000015161132690919063ffffffff16565b826040019061ffff16908161ffff16815250506002810190506110c281836000015161132690919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506110f281836000015161134e90919063ffffffff16565b826080019063ffffffff16908163ffffffff1681525050600481019050600061112882846000015161132690919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60008251600183011115151561116557600080fd5b60ff8260018501015116905092915050565b600083518284011115151561118b57600080fd5b818360208601012090509392505050565b6111a46114af565b825182111515156111b457600080fd5b84602001518560000151518386010111156111e6576111e58560026111df8860200151888701611378565b02611394565b5b6000808651805187602083010193508088870111156112055787860182525b60208701925050505b602084101515611233578051825260208201915060208101905060208403935061120e565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b60008063613d307861127b858761134e90919063ffffffff16565b63ffffffff1614151561129757600080819150915091506112c1565b602c8310156112af57600080819150915091506112c1565b6112bc85600486016113b8565b915091505b935093915050565b6000808290505b60011561131a578351811015156112e357fe5b60006112f8828661115090919063ffffffff16565b60ff16905060018101820191506000811415611314575061131a565b506112d0565b82810391505092915050565b60008251600283011115151561133b57600080fd5b61ffff8260028501015116905092915050565b60008251600483011115151561136357600080fd5b63ffffffff8260048501015116905092915050565b60008183111561138a5782905061138e565b8190505b92915050565b6060826000015190506113a78383610f0a565b506113b28382610f61565b50505050565b60008060288385510310156113d657600080819150915091506114a8565b600080905060008490505b6028850181101561149b576004829060020a029150600061140b828861115090919063ffffffff16565b60ff169050603081101580156114215750603a81105b1561143357603081038317925061148d565b604181101580156114445750604781105b1561145657603781038317925061148c565b606181101580156114675750606781105b1561147957605781038317925061148b565b600080819150945094505050506114a8565b5b5b5080806001019150506113e1565b5080600181915092509250505b9250929050565b604080519081016040528060608152602001600081525090565b60e0604051908101604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff1681526020016000815260200160008152509056fea165627a7a723058208aaffbcfa2e5808a1a346bb40ebe63153d148714ddb48b2001cc973bff15e2420029",
  "deployedBytecode": "0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100725780633f15457f146100e45780637dc0d1d01461013b578063be27b22c14610192578063d94585bd146102f1575b600080fd5b34801561007e57600080fd5b506100ca6004803603602081101561009557600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506104e7565b604051808215151515815260200191505060405180910390f35b3480156100f057600080fd5b506100f9610651565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014757600080fd5b50610150610677565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561019e57600080fd5b506102ef600480360360408110156101b557600080fd5b81019080803590602001906401000000008111156101d257600080fd5b8201836020820111156101e457600080fd5b8035906020019184600183028401116401000000008311171561020657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561026957600080fd5b82018360208201111561027b57600080fd5b8035906020019184600183028401116401000000008311171561029d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061069c565b005b3480156102fd57600080fd5b506104e56004803603606081101561031457600080fd5b810190808035906020019064010000000081111561033157600080fd5b82018360208201111561034357600080fd5b8035906020019184600183028401116401000000008311171561036557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460018302840111640100000000831117156103fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561045f57600080fd5b82018360208201111561047157600080fd5b8035906020019184600183028401116401000000008311171561049357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506108b1565b005b600060405180807f737570706f727473496e74657266616365286279746573342900000000000000815250601901905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064a575060405180807f6f7261636c6528290000000000000000000000000000000000000000000000008152506008019050604051809103902060405180807f70726f7665416e64436c61696d2862797465732c62797465732c6279746573298152506020019050604051809103902060405180807f636c61696d2862797465732c62797465732900000000000000000000000000008152506012019050604051809103902018187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006106ca6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168484610ab5565b50809150506000806106db85610e3b565b8092508193505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59238284866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b1580156107b057600080fd5b505af11580156107c4573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1681836040516020018083815260200182815260200192505050604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba39876040518080602001828103825283818151815260200191508051906020019080838360005b83811015610870578082015181840152602081019050610855565b50505050905090810190601f16801561089d5780820380516001836020036101000a031916815260200191505b509250505060405180910390a35050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166376a14d1d83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561095f578082015181840152602081019050610944565b50505050905090810190601f16801561098c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156109c55780820151818401526020810190506109aa565b50505050905090810190601f1680156109f25780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610a1357600080fd5b505af1158015610a27573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015610a5157600080fd5b810190808051640100000000811115610a6957600080fd5b82810190506020810184811115610a7f57600080fd5b8151856001820283011164010000000082111715610a9c57600080fd5b50509291905050509050610ab0838261069c565b505050565b600080610ac06114af565b610ad7600586510182610f0a90919063ffffffff16565b50610b206040805190810160405280600581526020017f045f656e7300000000000000000000000000000000000000000000000000000081525082610f6190919063ffffffff16565b50610b348582610f6190919063ffffffff16565b506000808773ffffffffffffffffffffffffffffffffffffffff1663087991bc601085600001516040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808361ffff1661ffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610bd4578082015181840152602081019050610bb9565b50505050905090810190601f168015610c015780820380516001836020036101000a031916815260200191505b50935050505060606040518083038186803b158015610c1f57600080fd5b505afa158015610c33573d6000803e3d6000fd5b505050506040513d6060811015610c4957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050909150809350819250505060006c01000000000000000000000000026bffffffffffffffffffffffff1916826bffffffffffffffffffffffff1916148015610cb7575060008651145b15610cce5760008081915094509450505050610e33565b85805190602001206bffffffffffffffffffffffff1916826bffffffffffffffffffffffff1916141515610d0157600080fd5b610d096114c9565b610d1d600088610f8390919063ffffffff16565b90505b610d2981610fad565b1515610e245742816080015163ffffffff16830167ffffffffffffffff1610151515610de3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001807f444e53207265636f7264206973207374616c653b2072656672657368206f722081526020017f64656c657465206974206265666f72652070726f63656564696e672e0000000081525060400191505060405180910390fd5b600080610df4898460a00151610fc3565b80935081925050508115610e145780600197509750505050505050610e33565b5050610e1f8161103a565b610d20565b50600080819150945094505050505b935093915050565b6000806000610e5460008561115090919063ffffffff16565b60ff1690506000610e71600183018661115090919063ffffffff16565b60ff1690506000610e906002838501018761115090919063ffffffff16565b60ff16141515610e9f57600080fd5b610eb5600183876111779092919063ffffffff16565b6000600102610ed28460020184896111779092919063ffffffff16565b604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120935093505050915091565b610f126114af565b6000602083811515610f2057fe5b06141515610f3d57602082811515610f3457fe5b06602003820191505b81836020018181525050604051808452600081528281016040525082905092915050565b610f696114af565b610f7b8384600001515184855161119c565b905092915050565b610f8b6114c9565b828160000181905250818160c0018181525050610fa78161103a565b92915050565b6000816000015151826020015110159050919050565b6000805b8351831015611028576000610fe5848661115090919063ffffffff16565b60ff169050600184019350600080610ffe878785611260565b8093508192505050811561101b5780600194509450505050611033565b8286019550505050610fc7565b600080819150915091505b9250929050565b8060c00151816020018181525050806000015151816020015110151561105f5761114d565b6000611073826000015183602001516112c9565b826020015101905061109281836000015161132690919063ffffffff16565b826040019061ffff16908161ffff16815250506002810190506110c281836000015161132690919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506110f281836000015161134e90919063ffffffff16565b826080019063ffffffff16908163ffffffff1681525050600481019050600061112882846000015161132690919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60008251600183011115151561116557600080fd5b60ff8260018501015116905092915050565b600083518284011115151561118b57600080fd5b818360208601012090509392505050565b6111a46114af565b825182111515156111b457600080fd5b84602001518560000151518386010111156111e6576111e58560026111df8860200151888701611378565b02611394565b5b6000808651805187602083010193508088870111156112055787860182525b60208701925050505b602084101515611233578051825260208201915060208101905060208403935061120e565b60006001856020036101000a03905080198251168184511681811785525050879350505050949350505050565b60008063613d307861127b858761134e90919063ffffffff16565b63ffffffff1614151561129757600080819150915091506112c1565b602c8310156112af57600080819150915091506112c1565b6112bc85600486016113b8565b915091505b935093915050565b6000808290505b60011561131a578351811015156112e357fe5b60006112f8828661115090919063ffffffff16565b60ff16905060018101820191506000811415611314575061131a565b506112d0565b82810391505092915050565b60008251600283011115151561133b57600080fd5b61ffff8260028501015116905092915050565b60008251600483011115151561136357600080fd5b63ffffffff8260048501015116905092915050565b60008183111561138a5782905061138e565b8190505b92915050565b6060826000015190506113a78383610f0a565b506113b28382610f61565b50505050565b60008060288385510310156113d657600080819150915091506114a8565b600080905060008490505b6028850181101561149b576004829060020a029150600061140b828861115090919063ffffffff16565b60ff169050603081101580156114215750603a81105b1561143357603081038317925061148d565b604181101580156114445750604781105b1561145657603781038317925061148c565b606181101580156114675750606781105b1561147957605781038317925061148b565b600080819150945094505050506114a8565b5b5b5080806001019150506113e1565b5080600181915092509250505b9250929050565b604080519081016040528060608152602001600081525090565b60e0604051908101604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff1681526020016000815260200160008152509056fea165627a7a723058208aaffbcfa2e5808a1a346bb40ebe63153d148714ddb48b2001cc973bff15e2420029",
  "sourceMap": "284:2213:1:-;;;724:98;8:9:-1;5:2;;;30:1;27;20:12;5:2;724:98:1;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;724:98:1;;;;;;;;;;;;;;;;;;;;;;;;;788:7;779:6;;:16;;;;;;;;;;;;;;;;;;811:4;805:3;;:10;;;;;;;;;;;;;;;;;;724:98;;284:2213;;;;;;",
  "deployedSourceMap": "284:2213:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2314:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2314:181:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2314:181:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;339:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;339:14:1;;;;;;;;;;;;;;;;;;;;;;;;;;;313:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;313:20:1;;;;;;;;;;;;;;;;;;;;;;;;;;;1314:420;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1314:420:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1314:420:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1314:420:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1314:420:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1314:420:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1314:420:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1314:420:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1314:420:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1314:420:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1314:420:1;;;;;;;;;;;;;;;;;;2133:175;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2133:175:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2133:175:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2133:175:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2133:175:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2133:175:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2133:175:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2133:175:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2133:175:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2133:175:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2133:175:1;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2133:175:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2133:175:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2133:175:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2133:175:1;;;;;;;;;;;;;;;;;;2314:181;2384:4;411:38;;;;;;;;;;;;;;;;;;;2407:32;;;:11;:32;;;;:81;;;;612:21;;;;;;;;;;;;;;;;;;;556:45;;;;;;;;;;;;;;;;;;;514:31;;;;;;;;;;;;;;;;;;;:87;:119;2458:30;;;:11;:30;;;;2407:81;2400:88;;2314:181;;;:::o;339:14::-;;;;;;;;;;;;;:::o;313:20::-;;;;;;;;;;;;;:::o;1314:420::-;1385:12;1417:52;1449:6;;;;;;;;;;;1457:4;1463:5;1417:31;:52::i;:::-;1407:62;;;;;1480:17;1507:16;1557:31;1583:4;1557:25;:31::i;:::-;1533:55;;;;;;;;1599:3;;;;;;;;;;;:19;;;1619:8;1629:9;1640:4;1599:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1599:46:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1599:46:1;;;;1716:4;1660:67;;1693:8;1703:9;1676:37;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1676:37:1;;;1666:48;;;;;;1660:67;1722:4;1660:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1660:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1314:420;;;;;:::o;2133:175::-;2240:6;;;;;;;;;;;:19;;;2260:5;2267;2240:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2240:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2240:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2240:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2240:33:1;;;;;;39:16:-1;36:1;17:17;2:54;2240:33:1;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2240:33:1;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;71:11;66:3;62:21;55:28;;123:4;118:3;114:14;159:9;141:16;138:31;135:2;;;182:1;179;172:12;135:2;219:3;213:10;330:9;325:1;311:12;307:20;289:16;285:43;282:58;261:11;247:12;244:29;233:115;230:2;;;361:1;358;351:12;230:2;0:372;;2240:33:1;;;;;;2232:41;;2283:18;2289:4;2295:5;2283;:18::i;:::-;2133:175;;;:::o;793:1096:0:-;919:7;928:4;997:24;;:::i;:::-;1031:25;1054:1;1040:4;:11;:15;1031:3;:8;;:25;;;;:::i;:::-;;1066:22;;;;;;;;;;;;;;;;;;;:3;:10;;:22;;;;:::i;:::-;;1098:16;1109:4;1098:3;:10;;:16;;;;:::i;:::-;;1124:12;1146:15;1266:6;:13;;;440:2;1290:3;:7;;;1266:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1266:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1266:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1266:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1266:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:53;;;;;;;;;;;1328:1;1320:10;;1312:18;;;:4;:18;;;;:39;;;;;1350:1;1334:5;:12;:17;1312:39;1308:73;;;1369:3;1375:5;1353:28;;;;;;;;;;;;1308:73;1426:5;1416:16;;;;;;1400:33;;;:4;:33;;;;1392:42;;;;;;;;1450:30;;:::i;:::-;1483:19;1500:1;1483:5;:16;;:19;;;;:::i;:::-;1450:52;;1445:399;1505:11;:4;:9;:11::i;:::-;1504:12;1445:399;;;1576:3;1564:4;:8;;;1553:19;;:8;:19;:26;;;;1545:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1659:10;1683:12;1725:32;1733:5;1740:4;:16;;;1725:7;:32::i;:::-;1709:48;;;;;;;;1775:5;1771:63;;;1808:4;1814;1800:19;;;;;;;;;;;;1771:63;1445:399;;1518:11;:4;:9;:11::i;:::-;1445:399;;;;1870:3;1876:5;1854:28;;;;;;;;;;793:1096;;;;;;;:::o;449:338::-;510:7;519;538:8;549:17;564:1;549:4;:14;;:17;;;;:::i;:::-;538:28;;;;576:11;590:23;611:1;605:3;:7;590:4;:14;;:23;;;;:::i;:::-;576:37;;;;668:1;632:32;662:1;653:6;647:3;:12;:16;632:4;:14;;:32;;;;:::i;:::-;:37;;;624:46;;;;;;;;689:19;701:1;704:3;689:4;:11;;:19;;;;;:::i;:::-;745:1;737:10;;749:28;765:3;761:1;:7;770:6;749:4;:11;;:28;;;;;:::i;:::-;720:58;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;720:58:0;;;710:69;;;;;;681:99;;;;;;449:338;;;:::o;978:446:3:-;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;2435:182:6:-;2510:21;;:::i;:::-;2554:4;2543:3;:8;;:15;;;;2585:6;2568:3;:14;;:23;;;;;2601:9;2606:3;2601:4;:9::i;:::-;2435:182;;;;:::o;2788:121::-;2848:4;2886;:9;;;:16;2871:4;:11;;;:31;;2864:38;;2788:121;;;:::o;1895:411:0:-;1965:7;1974:4;1990:271;2003:5;:12;1997:3;:18;1990:271;;;2031:8;2042:20;2058:3;2042:5;:15;;:20;;;;:::i;:::-;2031:31;;;;2071:1;2064:8;;;;2087:10;2111:12;2153:28;2165:5;2172:3;2177;2153:11;:28::i;:::-;2137:44;;;;;;;;2200:5;2196:30;;;2215:4;2221;2207:19;;;;;;;;;2196:30;2247:3;2240:10;;;;1990:271;;;;;;2287:3;2293:5;2271:28;;;;;;;1895:411;;;;;;:::o;3032:682:6:-;3108:4;:15;;;3094:4;:11;;:29;;;;;3152:4;:9;;;:16;3137:4;:11;;;:31;;3133:68;;;3184:7;;3133:68;3236:8;3261:34;3272:4;:9;;;3283:4;:11;;;3261:10;:34::i;:::-;3247:4;:11;;;:48;3236:59;;3358:25;3379:3;3358:4;:9;;;:20;;:25;;;;:::i;:::-;3343:4;:12;;:40;;;;;;;;;;;3400:1;3393:8;;;;3424:25;3445:3;3424:4;:9;;;:20;;:25;;;;:::i;:::-;3411:4;:10;;:38;;;;;;;;;;;3466:1;3459:8;;;;3488:25;3509:3;3488:4;:9;;;:20;;:25;;;;:::i;:::-;3477:4;:8;;:36;;;;;;;;;;;3530:1;3523:8;;;;3568:16;3587:25;3608:3;3587:4;:9;;;:20;;:25;;;;:::i;:::-;3568:44;;;;3629:1;3622:8;;;;3659:3;3640:4;:16;;:22;;;;;3696:11;3690:3;:17;3672:4;:15;;:35;;;;;3032:682;;;;:::o;5331:219:4:-;5402:9;5442:4;:11;5437:1;5431:3;:7;:22;;5423:31;;;;;;;;5529:4;5522:3;5518:1;5512:4;5508:12;5504:22;5498:29;5494:40;5487:47;;5473:71;;;;:::o;306:238::-;387:11;434:4;:11;427:3;418:6;:12;:27;;410:36;;;;;;;;524:3;515:6;510:2;504:4;500:13;496:26;486:42;479:49;;465:73;;;;;:::o;2866:1343:3:-;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;2312:390:0:-;2394:7;2403:4;2536:10;2513:19;2528:3;2513;:14;;:19;;;;:::i;:::-;:33;;;;2509:67;;;2564:3;2570:5;2548:28;;;;;;;;;2509:67;2620:2;2614:3;:8;2610:42;;;2640:3;2646:5;2624:28;;;;;;;;;2610:42;2669:26;2682:3;2693:1;2687:3;:7;2669:12;:26::i;:::-;2662:33;;;;2312:390;;;;;;;:::o;535:367:6:-;609:4;625:8;636:6;625:17;;652:215;659:4;652:215;;;692:4;:11;686:3;:17;679:25;;;;;;718:13;734:19;749:3;734:4;:14;;:19;;;;:::i;:::-;718:35;;;;785:1;774:8;:12;767:19;;;;816:1;804:8;:13;800:57;;;837:5;;;800:57;652:215;;;;889:6;883:3;:12;876:19;;;535:367;;;;:::o;5794:223:4:-;5866:10;5907:4;:11;5902:1;5896:3;:7;:22;;5888:31;;;;;;;;5994:6;5987:3;5983:1;5977:4;5973:12;5969:22;5963:29;5959:42;5952:49;;5938:73;;;;:::o;6261:227::-;6333:10;6374:4;:11;6369:1;6363:3;:7;:22;;6355:31;;;;;;;;6461:10;6454:3;6450:1;6444:4;6440:12;6436:22;6430:29;6426:46;6419:53;;6405:77;;;;:::o;2026:134:3:-;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;2708:639:0:-;2781:7;2790:4;2829:2;2823:3;2810;:10;:16;:21;2806:55;;;2849:3;2855:5;2833:28;;;;;;;;;2806:55;2871:8;2882:1;2871:12;;2898:6;2907:3;2898:12;;2893:411;2922:2;2916:3;:8;2912:1;:12;2893:411;;;2953:1;2945:9;;;;;;;2968:6;2977:16;2991:1;2977:3;:13;;:16;;;;:::i;:::-;2968:25;;;;3016:2;3011:1;:7;;:17;;;;;3026:2;3022:1;:6;3011:17;3007:287;;;3059:2;3055:1;:6;3048:13;;;;3007:287;;;3091:2;3086:1;:7;;:17;;;;;3101:2;3097:1;:6;3086:17;3082:212;;;3134:2;3130:1;:6;3123:13;;;;3082:212;;;3166:2;3161:1;:7;;:18;;;;;3176:3;3172:1;:7;3161:18;3157:137;;;3210:2;3206:1;:6;3199:13;;;;3157:137;;;3267:3;3273:5;3251:28;;;;;;;;;;;;3157:137;3082:212;3007:287;2893:411;2926:3;;;;;;;2893:411;;;;3329:3;3335:4;3313:27;;;;;;;;2708:639;;;;;;:::o;284:2213:1:-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"@ensdomains/ens/contracts/ENSRegistry.sol\";\nimport \"@ensdomains/dnssec-oracle/contracts/DNSSEC.sol\";\nimport \"./DNSClaimChecker.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\n    DNSSEC public oracle;\n    ENS public ens;\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\n    constructor(DNSSEC _dnssec, ENS _ens) public {\n        oracle = _dnssec;\n        ens = _ens;\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        address addr;\n        (addr,) = DNSClaimChecker.getOwnerAddress(oracle, name, proof);\n\n        bytes32 labelHash;\n        bytes32 rootNode;\n        (labelHash, rootNode) = DNSClaimChecker.getLabels(name);\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",
  "sourcePath": "/Users/makoto/work/ens/dnsregistrar/contracts/DNSRegistrar.sol",
  "ast": {
    "absolutePath": "/Users/makoto/work/ens/dnsregistrar/contracts/DNSRegistrar.sol",
    "exportedSymbols": {
      "DNSRegistrar": [
        591
      ]
    },
    "id": 592,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 442,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
        "file": "@ensdomains/ens/contracts/ENSRegistry.sol",
        "id": 443,
        "nodeType": "ImportDirective",
        "scope": 592,
        "sourceUnit": 2795,
        "src": "25:51:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
        "file": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
        "id": 444,
        "nodeType": "ImportDirective",
        "scope": 592,
        "sourceUnit": 1905,
        "src": "77:56:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/makoto/work/ens/dnsregistrar/contracts/DNSClaimChecker.sol",
        "file": "./DNSClaimChecker.sol",
        "id": 445,
        "nodeType": "ImportDirective",
        "scope": 592,
        "sourceUnit": 441,
        "src": "134:31:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@dev An ENS registrar that allows the owner of a DNS name to claim the\n     corresponding name in ENS.",
        "fullyImplemented": true,
        "id": 591,
        "linearizedBaseContracts": [
          591
        ],
        "name": "DNSRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 447,
            "name": "oracle",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "313:20:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DNSSEC_$1904",
              "typeString": "contract DNSSEC"
            },
            "typeName": {
              "contractScope": null,
              "id": 446,
              "name": "DNSSEC",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1904,
              "src": "313:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DNSSEC_$1904",
                "typeString": "contract DNSSEC"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 449,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "339:14:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$2605",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 448,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2605,
              "src": "339:3:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$2605",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 456,
            "name": "INTERFACE_META_ID",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "360:90:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 450,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "360:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "hexValue": "737570706f727473496e746572666163652862797465733429",
                      "id": 453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "421:27:1",
                      "subdenomination": null,
                      "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": 452,
                    "name": "keccak256",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2803,
                    "src": "411:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                      "typeString": "function (bytes memory) pure returns (bytes32)"
                    }
                  },
                  "id": 454,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "411:38:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                ],
                "id": 451,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "404:6:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes4_$",
                  "typeString": "type(bytes4)"
                },
                "typeName": "bytes4"
              },
              "id": 455,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "404:46:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 471,
            "name": "DNSSEC_CLAIM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "456:183:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 457,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "456:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "commonType": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "id": 469,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "leftExpression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "636c61696d2862797465732c627974657329",
                          "id": 460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "524:20:1",
                          "subdenomination": null,
                          "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": 459,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2803,
                        "src": "514:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 461,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "514:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "^",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "70726f7665416e64436c61696d2862797465732c62797465732c627974657329",
                          "id": 463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "566:34:1",
                          "subdenomination": null,
                          "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": 462,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2803,
                        "src": "556:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "556:45:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "514:87:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "BinaryOperation",
                  "operator": "^",
                  "rightExpression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6f7261636c652829",
                        "id": 467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "622:10:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db580555",
                          "typeString": "literal_string \"oracle()\""
                        },
                        "value": "oracle()"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db580555",
                          "typeString": "literal_string \"oracle()\""
                        }
                      ],
                      "id": 466,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2803,
                      "src": "612:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "612:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "src": "514:119:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                ],
                "id": 458,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "498:6:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes4_$",
                  "typeString": "type(bytes4)"
                },
                "typeName": "bytes4"
              },
              "id": 470,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "498:141:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 479,
            "name": "Claim",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 473,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 479,
                  "src": "658:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 472,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "658:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 475,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 479,
                  "src": "680:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "680:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 477,
                  "indexed": false,
                  "name": "dnsname",
                  "nodeType": "VariableDeclaration",
                  "scope": 479,
                  "src": "703:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 476,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "703:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "657:60:1"
            },
            "src": "646:72:1"
          },
          {
            "body": {
              "id": 494,
              "nodeType": "Block",
              "src": "769:53:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 486,
                      "name": "oracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 447,
                      "src": "779:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$1904",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 487,
                      "name": "_dnssec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 481,
                      "src": "788:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$1904",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "src": "779:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$1904",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "id": 489,
                  "nodeType": "ExpressionStatement",
                  "src": "779:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 490,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 449,
                      "src": "805:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$2605",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 483,
                      "src": "811:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$2605",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "805:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$2605",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 493,
                  "nodeType": "ExpressionStatement",
                  "src": "805:10:1"
                }
              ]
            },
            "documentation": null,
            "id": 495,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 481,
                  "name": "_dnssec",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "736:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DNSSEC_$1904",
                    "typeString": "contract DNSSEC"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 480,
                    "name": "DNSSEC",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1904,
                    "src": "736:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$1904",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 483,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "752:8:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$2605",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 482,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2605,
                    "src": "752:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$2605",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "735:26:1"
            },
            "returnParameters": {
              "id": 485,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "769:0:1"
            },
            "scope": 591,
            "src": "724:98:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 550,
              "nodeType": "Block",
              "src": "1375:359:1",
              "statements": [
                {
                  "assignments": [
                    503
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 503,
                      "name": "addr",
                      "nodeType": "VariableDeclaration",
                      "scope": 550,
                      "src": "1385:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 502,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1385:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 504,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1385:12:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 505,
                          "name": "addr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 503,
                          "src": "1408:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        null
                      ],
                      "id": 506,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1407:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$__$",
                        "typeString": "tuple(address,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 509,
                          "name": "oracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 447,
                          "src": "1449:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DNSSEC_$1904",
                            "typeString": "contract DNSSEC"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 510,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 497,
                          "src": "1457:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 511,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 499,
                          "src": "1463:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DNSSEC_$1904",
                            "typeString": "contract DNSSEC"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 507,
                          "name": "DNSClaimChecker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 440,
                          "src": "1417:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_DNSClaimChecker_$440_$",
                            "typeString": "type(library DNSClaimChecker)"
                          }
                        },
                        "id": 508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getOwnerAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 222,
                        "src": "1417:31:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_contract$_DNSSEC_$1904_$_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": 512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1417:52:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_bool_$",
                        "typeString": "tuple(address,bool)"
                      }
                    },
                    "src": "1407:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 514,
                  "nodeType": "ExpressionStatement",
                  "src": "1407:62:1"
                },
                {
                  "assignments": [
                    516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 516,
                      "name": "labelHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 550,
                      "src": "1480:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 515,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1480:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 517,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1480:17:1"
                },
                {
                  "assignments": [
                    519
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 519,
                      "name": "rootNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 550,
                      "src": "1507:16:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 518,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1507:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 520,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1507:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 521,
                          "name": "labelHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 516,
                          "src": "1534:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 522,
                          "name": "rootNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 519,
                          "src": "1545:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "id": 523,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1533:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$",
                        "typeString": "tuple(bytes32,bytes32)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 526,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 497,
                          "src": "1583:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 524,
                          "name": "DNSClaimChecker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 440,
                          "src": "1557:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_DNSClaimChecker_$440_$",
                            "typeString": "type(library DNSClaimChecker)"
                          }
                        },
                        "id": 525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getLabels",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 80,
                        "src": "1557:25:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$_t_bytes32_$",
                          "typeString": "function (bytes memory) view returns (bytes32,bytes32)"
                        }
                      },
                      "id": 527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1557:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$",
                        "typeString": "tuple(bytes32,bytes32)"
                      }
                    },
                    "src": "1533:55:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 529,
                  "nodeType": "ExpressionStatement",
                  "src": "1533:55:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 533,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 519,
                        "src": "1619:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 534,
                        "name": "labelHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 516,
                        "src": "1629:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 535,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 503,
                        "src": "1640: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": {
                        "argumentTypes": null,
                        "id": 530,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 449,
                        "src": "1599:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$2605",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setSubnodeOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2562,
                      "src": "1599:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address) external"
                      }
                    },
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1599:46:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 537,
                  "nodeType": "ExpressionStatement",
                  "src": "1599:46:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 542,
                                "name": "rootNode",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 519,
                                "src": "1693:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 543,
                                "name": "labelHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 516,
                                "src": "1703:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 540,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2796,
                                "src": "1676:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1676:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1676:37:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 539,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2803,
                          "src": "1666:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1666:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 546,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 503,
                        "src": "1716:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 547,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "1722: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": 538,
                      "name": "Claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 479,
                      "src": "1660:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,address,bytes memory)"
                      }
                    },
                    "id": 548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1660:67:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 549,
                  "nodeType": "EmitStatement",
                  "src": "1655:72:1"
                }
              ]
            },
            "documentation": "@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": 551,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 497,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 551,
                  "src": "1329:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 496,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1329:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 499,
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 551,
                  "src": "1348:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 498,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1348:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1328:39:1"
            },
            "returnParameters": {
              "id": 501,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1375:0:1"
            },
            "scope": 591,
            "src": "1314:420:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 573,
              "nodeType": "Block",
              "src": "2222:86:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 560,
                      "name": "proof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 557,
                      "src": "2232:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 563,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 555,
                          "src": "2260:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 564,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 557,
                          "src": "2267: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": {
                          "argumentTypes": null,
                          "id": 561,
                          "name": "oracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 447,
                          "src": "2240:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DNSSEC_$1904",
                            "typeString": "contract DNSSEC"
                          }
                        },
                        "id": 562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "submitRRSets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1866,
                        "src": "2240: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": 565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2240:33:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "2232:41:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 567,
                  "nodeType": "ExpressionStatement",
                  "src": "2232:41:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 569,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 553,
                        "src": "2289:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 570,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 557,
                        "src": "2295: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": 568,
                      "name": "claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 551,
                      "src": "2283:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,bytes memory)"
                      }
                    },
                    "id": 571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2283:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 572,
                  "nodeType": "ExpressionStatement",
                  "src": "2283:18:1"
                }
              ]
            },
            "documentation": "@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": 574,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proveAndClaim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 553,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 574,
                  "src": "2156:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 552,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2156:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 555,
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 574,
                  "src": "2175:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2175:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 557,
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 574,
                  "src": "2195:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 556,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2195:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2155:59:1"
            },
            "returnParameters": {
              "id": 559,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2222:0:1"
            },
            "scope": 591,
            "src": "2133:175:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 589,
              "nodeType": "Block",
              "src": "2390:105:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 581,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 576,
                        "src": "2407:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 582,
                        "name": "INTERFACE_META_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 456,
                        "src": "2422:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "2407:32:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 586,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 584,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 576,
                        "src": "2458:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 585,
                        "name": "DNSSEC_CLAIM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 471,
                        "src": "2473:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "2458:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2407:81:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 580,
                  "id": 588,
                  "nodeType": "Return",
                  "src": "2400:88:1"
                }
              ]
            },
            "documentation": null,
            "id": 590,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 576,
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 590,
                  "src": "2341:18:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 575,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2341:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2340:20:1"
            },
            "returnParameters": {
              "id": 580,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 579,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 590,
                  "src": "2384:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 578,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2384:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2383:6:1"
            },
            "scope": 591,
            "src": "2314:181:1",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 592,
        "src": "284:2213:1"
      }
    ],
    "src": "0:2498:1"
  },
  "legacyAST": {
    "absolutePath": "/Users/makoto/work/ens/dnsregistrar/contracts/DNSRegistrar.sol",
    "exportedSymbols": {
      "DNSRegistrar": [
        591
      ]
    },
    "id": 592,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 442,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:1"
      },
      {
        "absolutePath": "@ensdomains/ens/contracts/ENSRegistry.sol",
        "file": "@ensdomains/ens/contracts/ENSRegistry.sol",
        "id": 443,
        "nodeType": "ImportDirective",
        "scope": 592,
        "sourceUnit": 2795,
        "src": "25:51:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
        "file": "@ensdomains/dnssec-oracle/contracts/DNSSEC.sol",
        "id": 444,
        "nodeType": "ImportDirective",
        "scope": 592,
        "sourceUnit": 1905,
        "src": "77:56:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/makoto/work/ens/dnsregistrar/contracts/DNSClaimChecker.sol",
        "file": "./DNSClaimChecker.sol",
        "id": 445,
        "nodeType": "ImportDirective",
        "scope": 592,
        "sourceUnit": 441,
        "src": "134:31:1",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@dev An ENS registrar that allows the owner of a DNS name to claim the\n     corresponding name in ENS.",
        "fullyImplemented": true,
        "id": 591,
        "linearizedBaseContracts": [
          591
        ],
        "name": "DNSRegistrar",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 447,
            "name": "oracle",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "313:20:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_DNSSEC_$1904",
              "typeString": "contract DNSSEC"
            },
            "typeName": {
              "contractScope": null,
              "id": 446,
              "name": "DNSSEC",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1904,
              "src": "313:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DNSSEC_$1904",
                "typeString": "contract DNSSEC"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 449,
            "name": "ens",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "339:14:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ENS_$2605",
              "typeString": "contract ENS"
            },
            "typeName": {
              "contractScope": null,
              "id": 448,
              "name": "ENS",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2605,
              "src": "339:3:1",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ENS_$2605",
                "typeString": "contract ENS"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 456,
            "name": "INTERFACE_META_ID",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "360:90:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 450,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "360:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "arguments": [
                    {
                      "argumentTypes": null,
                      "hexValue": "737570706f727473496e746572666163652862797465733429",
                      "id": 453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "421:27:1",
                      "subdenomination": null,
                      "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": 452,
                    "name": "keccak256",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2803,
                    "src": "411:9:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                      "typeString": "function (bytes memory) pure returns (bytes32)"
                    }
                  },
                  "id": 454,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "411:38:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                ],
                "id": 451,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "404:6:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes4_$",
                  "typeString": "type(bytes4)"
                },
                "typeName": "bytes4"
              },
              "id": 455,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "404:46:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 471,
            "name": "DNSSEC_CLAIM_ID",
            "nodeType": "VariableDeclaration",
            "scope": 591,
            "src": "456:183:1",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 457,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "456:6:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "commonType": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "id": 469,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "leftExpression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "636c61696d2862797465732c627974657329",
                          "id": 460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "524:20:1",
                          "subdenomination": null,
                          "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": 459,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2803,
                        "src": "514:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 461,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "514:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "^",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "70726f7665416e64436c61696d2862797465732c62797465732c627974657329",
                          "id": 463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "566:34:1",
                          "subdenomination": null,
                          "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": 462,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2803,
                        "src": "556:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "556:45:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "514:87:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "BinaryOperation",
                  "operator": "^",
                  "rightExpression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6f7261636c652829",
                        "id": 467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "622:10:1",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db580555",
                          "typeString": "literal_string \"oracle()\""
                        },
                        "value": "oracle()"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_7dc0d1d053709daf7666fa92d95a4a378b3697fa925497d6f41c4277db580555",
                          "typeString": "literal_string \"oracle()\""
                        }
                      ],
                      "id": 466,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2803,
                      "src": "612:9:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "612:21:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "src": "514:119:1",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                ],
                "id": 458,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "498:6:1",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_bytes4_$",
                  "typeString": "type(bytes4)"
                },
                "typeName": "bytes4"
              },
              "id": 470,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "498:141:1",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "visibility": "private"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 479,
            "name": "Claim",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 473,
                  "indexed": true,
                  "name": "node",
                  "nodeType": "VariableDeclaration",
                  "scope": 479,
                  "src": "658:20:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 472,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "658:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 475,
                  "indexed": true,
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 479,
                  "src": "680:21:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 474,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "680:7:1",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 477,
                  "indexed": false,
                  "name": "dnsname",
                  "nodeType": "VariableDeclaration",
                  "scope": 479,
                  "src": "703:13:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 476,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "703:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "657:60:1"
            },
            "src": "646:72:1"
          },
          {
            "body": {
              "id": 494,
              "nodeType": "Block",
              "src": "769:53:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 486,
                      "name": "oracle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 447,
                      "src": "779:6:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$1904",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 487,
                      "name": "_dnssec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 481,
                      "src": "788:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_DNSSEC_$1904",
                        "typeString": "contract DNSSEC"
                      }
                    },
                    "src": "779:16:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$1904",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "id": 489,
                  "nodeType": "ExpressionStatement",
                  "src": "779:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 490,
                      "name": "ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 449,
                      "src": "805:3:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$2605",
                        "typeString": "contract ENS"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 491,
                      "name": "_ens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 483,
                      "src": "811:4:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ENS_$2605",
                        "typeString": "contract ENS"
                      }
                    },
                    "src": "805:10:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$2605",
                      "typeString": "contract ENS"
                    }
                  },
                  "id": 493,
                  "nodeType": "ExpressionStatement",
                  "src": "805:10:1"
                }
              ]
            },
            "documentation": null,
            "id": 495,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 481,
                  "name": "_dnssec",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "736:14:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_DNSSEC_$1904",
                    "typeString": "contract DNSSEC"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 480,
                    "name": "DNSSEC",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1904,
                    "src": "736:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_DNSSEC_$1904",
                      "typeString": "contract DNSSEC"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 483,
                  "name": "_ens",
                  "nodeType": "VariableDeclaration",
                  "scope": 495,
                  "src": "752:8:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ENS_$2605",
                    "typeString": "contract ENS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 482,
                    "name": "ENS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2605,
                    "src": "752:3:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ENS_$2605",
                      "typeString": "contract ENS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "735:26:1"
            },
            "returnParameters": {
              "id": 485,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "769:0:1"
            },
            "scope": 591,
            "src": "724:98:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 550,
              "nodeType": "Block",
              "src": "1375:359:1",
              "statements": [
                {
                  "assignments": [
                    503
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 503,
                      "name": "addr",
                      "nodeType": "VariableDeclaration",
                      "scope": 550,
                      "src": "1385:12:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 502,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1385:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 504,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1385:12:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 505,
                          "name": "addr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 503,
                          "src": "1408:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        null
                      ],
                      "id": 506,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1407:7:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$__$",
                        "typeString": "tuple(address,)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 509,
                          "name": "oracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 447,
                          "src": "1449:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DNSSEC_$1904",
                            "typeString": "contract DNSSEC"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 510,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 497,
                          "src": "1457:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 511,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 499,
                          "src": "1463:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_DNSSEC_$1904",
                            "typeString": "contract DNSSEC"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 507,
                          "name": "DNSClaimChecker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 440,
                          "src": "1417:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_DNSClaimChecker_$440_$",
                            "typeString": "type(library DNSClaimChecker)"
                          }
                        },
                        "id": 508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getOwnerAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 222,
                        "src": "1417:31:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_contract$_DNSSEC_$1904_$_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": 512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1417:52:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_bool_$",
                        "typeString": "tuple(address,bool)"
                      }
                    },
                    "src": "1407:62:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 514,
                  "nodeType": "ExpressionStatement",
                  "src": "1407:62:1"
                },
                {
                  "assignments": [
                    516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 516,
                      "name": "labelHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 550,
                      "src": "1480:17:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 515,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1480:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 517,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1480:17:1"
                },
                {
                  "assignments": [
                    519
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 519,
                      "name": "rootNode",
                      "nodeType": "VariableDeclaration",
                      "scope": 550,
                      "src": "1507:16:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 518,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1507:7:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 520,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1507:16:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 521,
                          "name": "labelHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 516,
                          "src": "1534:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 522,
                          "name": "rootNode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 519,
                          "src": "1545:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "id": 523,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "1533:21:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$",
                        "typeString": "tuple(bytes32,bytes32)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 526,
                          "name": "name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 497,
                          "src": "1583:4:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 524,
                          "name": "DNSClaimChecker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 440,
                          "src": "1557:15:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_DNSClaimChecker_$440_$",
                            "typeString": "type(library DNSClaimChecker)"
                          }
                        },
                        "id": 525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getLabels",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 80,
                        "src": "1557:25:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes32_$_t_bytes32_$",
                          "typeString": "function (bytes memory) view returns (bytes32,bytes32)"
                        }
                      },
                      "id": 527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1557:31:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$",
                        "typeString": "tuple(bytes32,bytes32)"
                      }
                    },
                    "src": "1533:55:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 529,
                  "nodeType": "ExpressionStatement",
                  "src": "1533:55:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 533,
                        "name": "rootNode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 519,
                        "src": "1619:8:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 534,
                        "name": "labelHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 516,
                        "src": "1629:9:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 535,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 503,
                        "src": "1640: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": {
                        "argumentTypes": null,
                        "id": 530,
                        "name": "ens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 449,
                        "src": "1599:3:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ENS_$2605",
                          "typeString": "contract ENS"
                        }
                      },
                      "id": 532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setSubnodeOwner",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2562,
                      "src": "1599:19:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,bytes32,address) external"
                      }
                    },
                    "id": 536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1599:46:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 537,
                  "nodeType": "ExpressionStatement",
                  "src": "1599:46:1"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 542,
                                "name": "rootNode",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 519,
                                "src": "1693:8:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 543,
                                "name": "labelHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 516,
                                "src": "1703:9:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 540,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2796,
                                "src": "1676:3:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1676:16:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1676:37:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 539,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2803,
                          "src": "1666:9:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1666:48:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 546,
                        "name": "addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 503,
                        "src": "1716:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 547,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 497,
                        "src": "1722: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": 538,
                      "name": "Claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 479,
                      "src": "1660:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,address,bytes memory)"
                      }
                    },
                    "id": 548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1660:67:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 549,
                  "nodeType": "EmitStatement",
                  "src": "1655:72:1"
                }
              ]
            },
            "documentation": "@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": 551,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 500,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 497,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 551,
                  "src": "1329:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 496,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1329:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 499,
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 551,
                  "src": "1348:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 498,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1348:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1328:39:1"
            },
            "returnParameters": {
              "id": 501,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1375:0:1"
            },
            "scope": 591,
            "src": "1314:420:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 573,
              "nodeType": "Block",
              "src": "2222:86:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 560,
                      "name": "proof",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 557,
                      "src": "2232:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 563,
                          "name": "input",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 555,
                          "src": "2260:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 564,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 557,
                          "src": "2267: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": {
                          "argumentTypes": null,
                          "id": 561,
                          "name": "oracle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 447,
                          "src": "2240:6:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_DNSSEC_$1904",
                            "typeString": "contract DNSSEC"
                          }
                        },
                        "id": 562,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "submitRRSets",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1866,
                        "src": "2240: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": 565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2240:33:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "2232:41:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 567,
                  "nodeType": "ExpressionStatement",
                  "src": "2232:41:1"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 569,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 553,
                        "src": "2289:4:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 570,
                        "name": "proof",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 557,
                        "src": "2295: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": 568,
                      "name": "claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 551,
                      "src": "2283:5:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes memory,bytes memory)"
                      }
                    },
                    "id": 571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2283:18:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 572,
                  "nodeType": "ExpressionStatement",
                  "src": "2283:18:1"
                }
              ]
            },
            "documentation": "@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": 574,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proveAndClaim",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 558,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 553,
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 574,
                  "src": "2156:17:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 552,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2156:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 555,
                  "name": "input",
                  "nodeType": "VariableDeclaration",
                  "scope": 574,
                  "src": "2175:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 554,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2175:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 557,
                  "name": "proof",
                  "nodeType": "VariableDeclaration",
                  "scope": 574,
                  "src": "2195:18:1",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 556,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2195:5:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2155:59:1"
            },
            "returnParameters": {
              "id": 559,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2222:0:1"
            },
            "scope": 591,
            "src": "2133:175:1",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 589,
              "nodeType": "Block",
              "src": "2390:105:1",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 581,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 576,
                        "src": "2407:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 582,
                        "name": "INTERFACE_META_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 456,
                        "src": "2422:17:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "2407:32:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 586,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 584,
                        "name": "interfaceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 576,
                        "src": "2458:11:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 585,
                        "name": "DNSSEC_CLAIM_ID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 471,
                        "src": "2473:15:1",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "src": "2458:30:1",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2407:81:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 580,
                  "id": 588,
                  "nodeType": "Return",
                  "src": "2400:88:1"
                }
              ]
            },
            "documentation": null,
            "id": 590,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 577,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 576,
                  "name": "interfaceID",
                  "nodeType": "VariableDeclaration",
                  "scope": 590,
                  "src": "2341:18:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 575,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2341:6:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2340:20:1"
            },
            "returnParameters": {
              "id": 580,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 579,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 590,
                  "src": "2384:4:1",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 578,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2384:4:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2383:6:1"
            },
            "scope": 591,
            "src": "2314:181:1",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 592,
        "src": "284:2213:1"
      }
    ],
    "src": "0:2498:1"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.0.14",
  "updatedAt": "2019-09-02T13:26:01.124Z",
  "devdoc": {
    "details": "An ENS registrar that allows the owner of a DNS name to claim the     corresponding name in ENS.",
    "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."
        }
      }
    }
  },
  "userdoc": {
    "methods": {}
  }
}